2013-09-27 44 views
-1

我想運行一個ListActivity,它需要一個要插入數據庫的文件名數組。這由insert()在下面的代碼中完成。我得到IllegalStateException在ArrayAdapter<String>。如果我正在呼叫另一個班級的insert()功能。所以,我無法在onCreate()方法中定義ArrayAdapter。請看下面的代碼,這是界定insert()方法 -java.lang.IllegalStateException:系統服務不可用於onCreate之前的活動()與ArrayAdapter <String>

public class FileEvent extends ListActivity implements ObserverActivity{ 
public static final String PREFS_NAME = "MyPreferencesFile"; 

public String filename; 
public String path; 
MyFileObserver myFileObserver; 
public adapter info ; 
ArrayAdapter<String> adapterarr; 
ListView listView; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    this.info = new adapter(this); 
    listView = (ListView) findViewById(android.R.id.list); 
    setContentView(R.layout.fileeventlist); 
    Bundle bundle = getIntent().getExtras(); 

    myFileObserver = new MyFileObserver("/storage/sdcard/DCIM/SAMPLE_IMAGES/"); 
     myFileObserver.registerObserver(this); 
     myFileObserver.startWatching(); 

/* String var_from_prev_intent = bundle.getString("path"); 
    insert(var_from_prev_intent); 
    SharedPreferences settings = getSharedPreferences (PREFS_NAME,0); 
    String newpath = ""; 
    this.path = settings.getString("name",newpath); 
    Log.v("New path in FileEvent : ",this.path);*/ 

} 

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{ 
Log.v("FileName to insert : ",path); 
Log.v("a3","a3"); 
this.info = new adapter(this); 
this.filename = path; 
Log.v("a4","a4"); 
if(info == null) 
{ 
    System.out.println("info is null here."); 
} 
else 
{ 
    System.out.println("info is not null here."); 
} 
int rowcount = info.getrowcountofpersons(); 
Log.v("a5","a5"); 
Log.v("rowcount in new list onCreate: ", ""+info.getrowcountofpersons()+""); 
Log.v("a6","a6"); 
String[] values = new String[rowcount]; 
Log.v("a7","a7"); 
for(int i =1;i<=rowcount;i++) 
{ 
    values[i-1]=info.getPersonList(i); 
    //Toast.makeText(getApplicationContext(), values[i-1], Toast.LENGTH_LONG).show(); 
    System.out.println("in for loop now"+values[i-1]); 
} 
Log.v("a8","a8"); 


adapterarr = new ArrayAdapter<String>(this, 
     android.R.layout.simple_list_item_1, values); 
Log.v("a9","a9"); 

Log.v("a10","a10"); 
listView.setItemsCanFocus(false); 
Log.v("a11","a11"); 
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
Log.v("a12","a12"); 

// Assign adapter to List 
setListAdapter(adapterarr); 
// new Bullet(info).execute((Void)null); 
Log.v("a13","a13"); 
    } 
    catch (Exception e) 
    { 
     Log.v("Error in insert() definition FileEvent.java : ",e.toString()); 
    } 
    } 


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

// try{ 
    Log.v("a14","a14"); 

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

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

*/ 

} 

而下面的logcat我得到,當我運行的代碼 -

09-27 06:37:23.269: A/FileObserver(2284): Unhandled exception in FileObserver [email protected] 
09-27 06:37:23.269: A/FileObserver(2284): java.lang.IllegalStateException: System services not available to Activities before onCreate() 
09-27 06:37:23.269: A/FileObserver(2284): at android.app.Activity.getSystemService(Activity.java:4492) 
09-27 06:37:23.269: A/FileObserver(2284): at android.widget.ArrayAdapter.init(ArrayAdapter.java:310) 
09-27 06:37:23.269: A/FileObserver(2284): at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:128) 
09-27 06:37:23.269: A/FileObserver(2284): at com.example.sample_fileobserver.FileEvent.insert(FileEvent.java:76) 
09-27 06:37:23.269: A/FileObserver(2284): at com.example.sample_fileobserver.MyFileObserver.onEvent(MyFileObserver.java:59) 
09-27 06:37:23.269: A/FileObserver(2284): at android.os.FileObserver$ObserverThread.onEvent(FileObserver.java:125) 
09-27 06:37:23.269: A/FileObserver(2284): at android.os.FileObserver$ObserverThread.observe(Native Method) 
09-27 06:37:23.269: A/FileObserver(2284): at android.os.FileObserver$ObserverThread.run(FileObserver.java:88) 

請告訴我在哪兒出錯了。

在此先感謝。

+0

在onCreate裏面初始化信息 –

+0

你是否在清單文件中添加了權限 – DjHacktorReborn

回答

1

嘗試將您的代碼移動到OnResume方法。

+0

@Naeem A. Malik,我不能那樣做,因爲我從另一個類調用'insert()'。 – nki

5

在onCreate之前,您不能執行public adapter info = new adapter(this);。將其初始化爲onCreate。

public adapter info; // Removed = new adapter(this); 

onCreate方法做這樣的

info = new adapter(this); 

而另一名嫌疑人是

public adapter info = new adapter(this); 
ArrayAdapter<String> adapter; 

我非常相信,這將無法編譯。所以驗證一下。

+0

沒有@Pankaj Kumar,當我刪除'public adapter info = new adapter(this);'時,一些其他函數使用'info'變量是變爲空。所以不能那樣做。 – nki

+0

@nki是的,你是對的。這就是爲什麼我從答案中刪除該行:)。什麼是適配器?如果此類將「ArrayAdapter adapter」更改爲「ArrayAdapter arrAdapter」並且此適配器的所有發生。 –

+0

是的,這是一個類。我應該保持相同的名字嗎?對不起,我不知道使用ArrayAdapter。 – nki

相關問題