IllegalStateException异常:的onCreate()在Android中Java的前不适用于活动的系统服务 [英] IllegalStateException: System services not available to Activities before onCreate() in android java

查看:161
本文介绍了IllegalStateException异常:的onCreate()在Android中Java的前不适用于活动的系统服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我面对此异常。我查了许多解决方案,但无法弄清楚什么是在我的code中的问题。这MainActivity.java:

 公共类MainActivity扩展ListActivity {
私人Button按钮,按钮1;
私人的ListView LV;
最终的String [] = listItems中的新的String [2];
ArrayAdapter<串GT; adapter_list = NULL;
@覆盖
保护无效的onCreate(捆绑savedInstanceState){    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);
    最后上下文的背景下=这;    按钮=(按钮)findViewById(R.id.button1);
    BUTTON1 =(按钮)findViewById(R.id.button2);
    LV =(ListView控件)findViewById(R.id.android_listView1);    button.setOnClickListener(新OnClickListener(){
        @覆盖
        公共无效的onClick(视图v){            新取()执行(硬件)。            // populateList(listItems中);
        }    });    button1.setOnClickListener(新OnClickListener(){
        @覆盖
        公共无效的onClick(视图v){
        }
    });}公共无效populateList(硬件高)
{
    时listItems [0] = h.device;
    listItems中[1] = h.manufacturer;
    adapter_list =新ArrayAdapter<串GT;(这一点,android.R.layout.simple_list_item_1,listItems中);
    lv.setAdapter(adapter_list);
}

}

我也有延伸AsyncTask的一个类:

 公共类获取扩展的AsyncTask<弦乐,太虚,五金GT; {
@覆盖
保护硬件doInBackground(字符串... STR){
        硬件H =新硬件();
        h.manufacturer =你好;
        h.device =你好;        返回H;
}
 保护无效onPostExecute(硬件高){
     MainActivity M =新MainActivity();
     m.populateList(H);
 }

}

这行excuting背景PROCES在MainActivity:

 新取()执行(硬件)。

我需要在这方面的帮助,在此先感谢

登录猫输出

 九月六日至28日:49:47.878:W / IInputConnectionWrapper(6925)上的非活动InputConnection showStatusIcon
9月6日至28日:49:49.777:D / AndroidRuntime(6925):关闭VM
9月6日至28日:49:49.777:W / dalvikvm(6925):主题ID = 1:螺纹未捕获的异常(组= 0x4001d7d0)退出
9月6日至28日:49:49.788:E / AndroidRuntime(6925):致命异常:主要
9月6日至28日:49:49.788:E / AndroidRuntime(6925):java.lang.IllegalStateException:之前的onCreate不向活动系统服务()
9月6日至28日:49:49.788:E / AndroidRuntime(6925):在android.app.Activity.getSystemService(Activity.java:3526)
9月6日至28日:49:49.788:E / AndroidRuntime(6925):在android.widget.ArrayAdapter.init(ArrayAdapter.java:271)
9月6日至28日:49:49.788:E / AndroidRuntime(6925):在android.widget.ArrayAdapter<&初始化GT;(ArrayAdapter.java:125)
9月6日至28日:49:49.788:E / AndroidRuntime(6925):在com.example.first.MainActivity.populateList(MainActivity.java:87)
9月6日至28日:49:49.788:E / AndroidRuntime(6925):在com.example.first.Fetch.onPostExecute(Fetch.java:38)
9月6日至28日:49:49.788:E / AndroidRuntime(6925):在com.example.first.Fetch.onPostExecute(Fetch.java:1)
9月6日至28日:49:49.788:E / AndroidRuntime(6925):在android.os.AsyncTask.finish(AsyncTask.java:417)
9月6日至28日:49:49.788:E / AndroidRuntime(6925):在android.os.AsyncTask.access $ 300(AsyncTask.java:127)
9月6日至28日:49:49.788:E / AndroidRuntime(6925):在android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:429)
9月6日至28日:49:49.788:E / AndroidRuntime(6925):在android.os.Handler.dispatchMessage(Handler.java:99)
9月6日至28日:49:49.788:E / AndroidRuntime(6925):在android.os.Looper.loop(Looper.java:123)
9月6日至28日:49:49.788:E / AndroidRuntime(6925):在android.app.ActivityThread.main(ActivityThread.java:4627)
9月6日至28日:49:49.788:E / AndroidRuntime(6925):在java.lang.reflect.Method.invokeNative(本机方法)
9月6日至28日:49:49.788:E / AndroidRuntime(6925):在java.lang.reflect.Method.invoke(Method.java:521)
9月6日至28日:49:49.788:E / AndroidRuntime(6925):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:871)
9月6日至28日:49:49.788:E / AndroidRuntime(6925):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
9月6日至28日:49:49.788:E / AndroidRuntime(6925):在dalvik.system.NativeStart.main(本机方法)


解决方案

但问题是:

 保护无效onPostExecute(硬件高){
     ** MainActivity M =新MainActivity(); **
     m.populateList(H);
 }

活动的生命周期是由Android本身的照顾。你不应该实例化这样的活动。而通过活动实例作为参数传递给AsyncTask的。和访问

onPostExecute()

I am facing this exception .I checked many solutions but can't figure out what's the problem in my code. This MainActivity.java :

public class MainActivity extends ListActivity {


private Button button , button1;
private ListView lv;
final String[] listitems = new String[2];
ArrayAdapter<String> adapter_list = null;


@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final Context context = this;

    button = (Button) findViewById(R.id.button1);
    button1 = (Button) findViewById(R.id.button2);
    lv  =(ListView)findViewById(R.id.android_listView1);

    button.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

            new Fetch().execute("Hardware");

            //populateList(listitems);
        }                   

    });

    button1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {               
        }                   
    });

}

public void populateList(Hardware h)
{
    listitems[0] = h.device;
    listitems[1] = h.manufacturer;
    adapter_list=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listitems);
    lv.setAdapter(adapter_list);
}

}

I have also a class which extends AsyncTask :

public class Fetch extends AsyncTask<String, Void, Hardware>  {
@Override
protected Hardware doInBackground(String... str) {


        Hardware h = new Hardware();
        h.manufacturer = "Hello";
        h.device = "Hello";

        return h;       
}   
 protected void onPostExecute(Hardware h) {
     MainActivity m = new MainActivity();
     m.populateList(h);
 }

}

This line is excuting the background proces in MainActivity :

new Fetch().execute("Hardware");

I need help in this , Thanks in advance

Log Cat Output

06-28 09:49:47.878: W/IInputConnectionWrapper(6925): showStatusIcon on inactive InputConnection
06-28 09:49:49.777: D/AndroidRuntime(6925): Shutting down VM
06-28 09:49:49.777: W/dalvikvm(6925): threadid=1: thread exiting with uncaught exception (group=0x4001d7d0)
06-28 09:49:49.788: E/AndroidRuntime(6925): FATAL EXCEPTION: main
06-28 09:49:49.788: E/AndroidRuntime(6925): java.lang.IllegalStateException: System services not available to Activities before onCreate()
06-28 09:49:49.788: E/AndroidRuntime(6925):     at android.app.Activity.getSystemService(Activity.java:3526)
06-28 09:49:49.788: E/AndroidRuntime(6925):     at android.widget.ArrayAdapter.init(ArrayAdapter.java:271)
06-28 09:49:49.788: E/AndroidRuntime(6925):     at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:125)
06-28 09:49:49.788: E/AndroidRuntime(6925):     at com.example.first.MainActivity.populateList(MainActivity.java:87)
06-28 09:49:49.788: E/AndroidRuntime(6925):     at com.example.first.Fetch.onPostExecute(Fetch.java:38)
06-28 09:49:49.788: E/AndroidRuntime(6925):     at com.example.first.Fetch.onPostExecute(Fetch.java:1)
06-28 09:49:49.788: E/AndroidRuntime(6925):     at android.os.AsyncTask.finish(AsyncTask.java:417)
06-28 09:49:49.788: E/AndroidRuntime(6925):     at android.os.AsyncTask.access$300(AsyncTask.java:127)
06-28 09:49:49.788: E/AndroidRuntime(6925):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
06-28 09:49:49.788: E/AndroidRuntime(6925):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-28 09:49:49.788: E/AndroidRuntime(6925):     at android.os.Looper.loop(Looper.java:123)
06-28 09:49:49.788: E/AndroidRuntime(6925):     at android.app.ActivityThread.main(ActivityThread.java:4627)
06-28 09:49:49.788: E/AndroidRuntime(6925):     at java.lang.reflect.Method.invokeNative(Native Method)
06-28 09:49:49.788: E/AndroidRuntime(6925):     at java.lang.reflect.Method.invoke(Method.java:521)
06-28 09:49:49.788: E/AndroidRuntime(6925):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871)
06-28 09:49:49.788: E/AndroidRuntime(6925):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
06-28 09:49:49.788: E/AndroidRuntime(6925):     at dalvik.system.NativeStart.main(Native Method)

解决方案

Problem is :

protected void onPostExecute(Hardware h) {
     **MainActivity m = new MainActivity();**
     m.populateList(h);
 }

Activity life cycle is taken care by Android itself. You should not instantiate the Activity like this. Rather pass the activity instance as parameter to the AsyncTask. And access it

onPostExecute() method

这篇关于IllegalStateException异常:的onCreate()在Android中Java的前不适用于活动的系统服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆