2013-09-28 5 views
1

Я пытаюсь использовать Intent для запуска ArrAdapter.java из класса FileEvent.java. В startActivity(), я получаю исключение из null-указателя. FileEvent.java расширяет действие, но не имеет setContentView(). Потому что я не показываю ничего в UI в этом классе. Пожалуйста, смотрите следующий код -Получение NullPointerException при запуске Activity in android

FileEvent.java: -

public class FileEvent extends Activity implements ObserverActivity{ 
    public static final String PREFS_NAME = "MyPreferencesFile"; 
    public static String path2; 
    public String filename; 
    public String path; 
    MyFileObserver myFileObserver; 
    public adapter info ; 
    public ArrayAdapter<String> adapterarr; 
    ListView listView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
      this.info = new adapter(this); 

     myFileObserver = new MyFileObserver("/storage/sdcard/DCIM/SAMPLE_IMAGES/"); 
      myFileObserver.registerObserver(this); 
      myFileObserver.startWatching(); 
    Bundle bundle = getIntent().getExtras(); 
} 

    protected void onPause(){ 
      myFileObserver.stopWatching(); 
      myFileObserver.unregisterObserver(this); 
      } 

      protected void onResume(){ 
      myFileObserver.registerObserver(this); 
      myFileObserver.startWatching(); 
      } 
    public void insert(String path) { 
     // TODO Auto-generated method stub 
//  try{ 

    this.info = new adapter(this); 
    this.filename = path; 

    if(info == null) 
    { 
     System.out.println("info is null here."); 
    } 
    else 
    { 
     System.out.println("info is not null here."); 
    // setpath(path); 
     System.out.println("sharedpreferences "+FileEvent.path2); 

     startActivity(new Intent("android.intent.action.ArrAdapter")); //Here I am getting the NullPointerException. 


     // i.putExtra("path", path); 

     /* } 
     } 

    private void setpath(String path) { 
     // TODO Auto-generated method stub 
    FileEvent.path2 = path; 

} 
    public void delete(String path) { 
     Log.v("entered delete() in FileEvent", "entered delete() in FileEvent"); 

     // TODO Auto-generated method stub 
this.info = new adapter(this); 
try{ 
    if(this.info == null) 
    { 
     System.out.println("this.info is null here"); 
    } 
    else 
    { 
     System.out.println("this.info is not null here"); 
      int id_of_deleted_person_photo = info.deletefile(path); 
Log.v("_id of FileName to delete : ", ""+id_of_deleted_person_photo+""); 
      } 
     } 
     catch(Exception e) 
     { 
      Log.v("Error in delete() in FileEvent.java : ",e.toString()); 
     } 
     Log.v("completed delete() in FileEvent", "completed delete() in FileEvent"); 
    } 
    @Override 
    public void onFileObserved(int Event, String path) { 
     // TODO Auto-generated method stub 
     Log.v("path in onFileObserved",path); 
    } 

ArrAdapter.java: -

public class ArrAdapter extends ListActivity{ 
public String path; 
ListView listView; 
public adapter info; 
public static final String PREFS_NAME = "MyPreferencesFile"; 
private ArrayAdapter<String> adapterarr; 
private String filename; 
public Context context; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
setContentView(R.layout.fileeventlist); 
info = new adapter(this); 
listView = (ListView) findViewById(android.R.id.list); 

    Log.v("value of FileEvent.path2 : ",FileEvent.path2); 
     insert(FileEvent.path2); 
     } 
     private void insert(String var_from_prev_intent1) { 
      // TODO Auto-generated method stub 
      try{ 
       int rowcount = info.getrowcountofpersons(); 
        Log.v("rowcount in new list onCreate: ", 

""+info.getrowcountofpersons()+""); 
       String[] values = new String[rowcount]; 
      for(int i =1;i<=rowcount;i++) 
      { 
       values[i-1]=info.getPersonList(i); 
       System.out.println("in for loop now"+values[i-1]); 
      } 
      this.adapterarr = new ArrayAdapter<String>(this, 
        android.R.layout.simple_list_item_1, values); 
      } 
      catch(Exception e) 
      { 
       Log.v("Error at ArrayAdapter : ",e.toString()); 
      } 
      if(adapterarr == null) 
      { 
       System.out.println("2. Here adapterarr is null."); 
      } 
      else 
      { 
       System.out.println("2. Here adapterarr is not null."); 
      } 



      listView.setItemsCanFocus(false); 

      listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 


      // Assign adapter to List 
      setListAdapter(adapterarr); 
      // new Bullet(info).execute((Void)null); 


     } 


protected void onListItemClick(ListView l, View v, int position, long id) { 

// try{ 

     super.onListItemClick(l, v, position, id); 
      // ListView Clicked item index 
      int itemPosition  = position; 
      // ListView Clicked item value 
      String itemValue = (String) l.getItemAtPosition(position); 
     // content.setText("Click : \n Position :"+itemPosition+" \n ListItem : " +itemValue); 
      String personname = itemValue; 
      try 
      { 
       System.out.println("paths in FileEvent : "+filename); 
       info.insert(filename,personname); 
      } 
      catch(Exception e) 
      { 
       e.printStackTrace(); 
      } 

    /* } 
     catch (Exception e) 
     { 
      Log.v("Error in insert() definition FileEvent.java : ",e.toString()); 
     } 

*/ 

} } 

    } 

я получаю LogCat следующим образом -

09-28 00:04:40.537: A/FileObserver(31484): Unhandled exception in FileObserver [email protected] 
09-28 00:04:40.537: A/FileObserver(31484): java.lang.NullPointerException 
09-28 00:04:40.537: A/FileObserver(31484): at android.app.Activity.startActivityForResult(Activity.java:3390) 
09-28 00:04:40.537: A/FileObserver(31484): at android.app.Activity.startActivityForResult(Activity.java:3351) 
09-28 00:04:40.537: A/FileObserver(31484): at android.app.Activity.startActivity(Activity.java:3587) 
09-28 00:04:40.537: A/FileObserver(31484): at android.app.Activity.startActivity(Activity.java:3555) 
09-28 00:04:40.537: A/FileObserver(31484): at com.example.sample_fileobserver.FileEvent.insert(FileEvent.java:95) 
09-28 00:04:40.537: A/FileObserver(31484): at com.example.sample_fileobserver.MyFileObserver.onEvent(MyFileObserver.java:59) 
09-28 00:04:40.537: A/FileObserver(31484): at android.os.FileObserver$ObserverThread.onEvent(FileObserver.java:125) 
09-28 00:04:40.537: A/FileObserver(31484): at android.os.FileObserver$ObserverThread.observe(Native Method) 
09-28 00:04:40.537: A/FileObserver(31484): at android.os.FileObserver$ObserverThread.run(FileObserver.java:88) 

AndroidManifest. xml: -

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.sample_fileobserver" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="17" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.example.sample_fileobserver.FileEvent" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.FIleEvent" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name="com.example.sample_fileobserver.ArrAdapter" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.ArrAdapter" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name="com.example.sample_fileobserver.FileModificationMonitor" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

     <service 
     android:enabled="true" 
     android:name="com.example.sample_fileobserver.FileModificationService"> 
    </service> 
</application> 

Я зарегистрировал оба класса в файле манифеста. Если нет, возможно, у меня есть ClassNotFound Exception. Таким образом, я не могу понять, почему это исключение при поднятии.

Заранее спасибо.

+0

ли вы пытались с startActivity (новый Intent (FileEvent.this, ArrAdapter.class))? –

+0

Да, я пробовал, уже @Hardy – nki

+0

Можете ли вы вставить свой AndroidManifest.xml код? –

ответ

2

Попробуйте начать свой 2-ой активность, используя код ниже:

startActivity(new Intent(this, ArrAdapter.class)); 
+0

Вы проверили [комментарии] (http://stackoverflow.com/questions/19063615/getting-nullpointerexception-while-starting-activity-in-android#comment28176493_19063615)? –

+0

Я не мог, так как сетевое соединение ушло в середине пути, и я представил, не заглядывая в новые комментарии. –

+0

Хорошо, хорошо. @nki уже пробовал это. –

0

Существует 2 проблемы на вашем коде. Так далеко.

первый startActivity

Изменить код на то, что сказал @Nitin

startActivity(new Intent(this, ArrAdapter.class)); 

разрешение второго SDCard

Из кода,

myFileObserver = new MyFileObserver("/storage/sdcard/DCIM/SAMPLE_IMAGES/"); 

Я думаю, что вы извлекаете данные из sdcard. Для этого вам нужно разрешение на внешнее хранилище. Добавить следующий код в ваш Manifest.xml

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
+0

Кроме того, SD-карта не будет иметь этот путь во всех устройствах. Используйте класс среды для поиска внешнего каталога. –

+0

После решения этой проблемы я изменю путь, как вы сказали, @NitinSethi. – nki

+0

@edisonthk, я обновил свой код, добавив разрешения на файл манифеста. Но также получить ту же ошибку. – nki

0

Использование окружающей среды Класс найти SD-карты:

File sdCard = Environment.getExternalStorageDirectory(); 
myFileObserver = new MyFileObserver(sdCard.getAbsolutePath() +"/DCIM/SAMPLE_IMAGES/"); 
+0

Я добавил путь согласно вашему предложению, geet. Но мой код разрывается при запуске. Изменение пути к файлу не должно влиять на него. По крайней мере, он должен показывать сообщения журнала в поле onCreate() класса ArrAdapter? – nki

Смежные вопросы