java.lang.IllegalStateException:使用ArrayAdapter <string> </string> onCreate()之前,活动不可用的系统服务

时间:2013-09-27 10:50:18

标签: java android

我正在尝试运行一个ListActivity,它接受一个文件名数组,这些文件名将被插入到数据库中。这由以下代码中的insert()完成。我在ArrayAdapter<String>收到IllegalStateException。如果我从另一个类调用insert()函数。所以,我无法在onCreate()方法中定义ArrayAdapter。请参阅以下代码,该代码定义了insert()方法 -

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 com.example.sample_fileobserver.MyFileObserver@b11955a0
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)

请告诉我哪里弄错了。

提前致谢。

2 个答案:

答案 0 :(得分: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;

我非常确定这不会编译。所以验证它。

答案 1 :(得分:1)

尝试将代码移动到OnResume方法。