StartActivity与RuntimeException崩溃:无法启动活动ComponentInfo

时间:2012-02-26 13:49:37

标签: android exception android-activity

我正在尝试按下按钮启动新活动。

主要活动代码:

public class HelloScreenActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final Button btn_lang = (Button)findViewById(R.id.btn_lang_rus);
        btn_lang.setOnClickListener(new View.OnClickListener() {    
            public void onClick(View v) {
                try
                {
                    Intent intent = new Intent();
                    intent.putExtra("type", getString(R.string.routes));
                    intent.setClass(HelloScreenActivity.this, RoutesListActivity.class);
                    startActivity(intent);  
                }
                catch(Exception exc)
                {
                    ShowMessage(exc.getMessage());  
                }               
            }
        });

}

下一个活动代码:

    public class RoutesListActivity extends Activity{
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.routes_list);
        Bundle extras = getIntent().getExtras(); 
        String type = (String) extras.get("type");

        ListView list = (ListView)findViewById(R.id.ent_list);
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(null, 0);
        final String[] routes = {this.getString(R.string.greenline), this.getString(R.string.redline)};
        if(type == "Routes")
        {      
            arrayAdapter = new ArrayAdapter<String>
                (this, android.R.layout.simple_list_item_1, routes);
            list.setAdapter(arrayAdapter);
        }

        list.setAdapter(arrayAdapter);
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            public void onItemClick(AdapterView<?> parentView, View childView, int pos,
                    long id) {
                try
                {       
                    Intent intent = new Intent();
                    intent.putExtra("display", routes[pos]);
                    intent.setClass(RoutesListActivity.this, TheMapActivity.class);
                    startActivity(intent);  
                }
                catch(Exception exc)
                {
                    ShowMessage(exc.getMessage());  
                }               
            }
        });
    }

    }

当我按下按钮时,应用程序崩溃(在startActivity(intent)通话中)

堆栈追踪:

02-26 19:39:35.382: W/dalvikvm(19398): threadid=1: thread exiting with uncaught exception (group=0x4001d5a0)
02-26 19:39:35.493: E/AndroidRuntime(19398): FATAL EXCEPTION: main
02-26 19:39:35.493: E/AndroidRuntime(19398): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.thumbsupstudio.mobitour/com.thumbsupstudio.mobitour.RoutesListActivity}: java.lang.NullPointerException
02-26 19:39:35.493: E/AndroidRuntime(19398):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1872)
02-26 19:39:35.493: E/AndroidRuntime(19398):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1893)
02-26 19:39:35.493: E/AndroidRuntime(19398):    at android.app.ActivityThread.access$1500(ActivityThread.java:135)
02-26 19:39:35.493: E/AndroidRuntime(19398):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1054)
02-26 19:39:35.493: E/AndroidRuntime(19398):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-26 19:39:35.493: E/AndroidRuntime(19398):    at android.os.Looper.loop(Looper.java:150)
02-26 19:39:35.493: E/AndroidRuntime(19398):    at android.app.ActivityThread.main(ActivityThread.java:4385)
02-26 19:39:35.493: E/AndroidRuntime(19398):    at java.lang.reflect.Method.invokeNative(Native Method)
02-26 19:39:35.493: E/AndroidRuntime(19398):    at java.lang.reflect.Method.invoke(Method.java:507)
02-26 19:39:35.493: E/AndroidRuntime(19398):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
02-26 19:39:35.493: E/AndroidRuntime(19398):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
02-26 19:39:35.493: E/AndroidRuntime(19398):    at dalvik.system.NativeStart.main(Native Method)
02-26 19:39:35.493: E/AndroidRuntime(19398): Caused by: java.lang.NullPointerException
02-26 19:39:35.493: E/AndroidRuntime(19398):    at android.view.ViewConfiguration.get(ViewConfiguration.java:230)
02-26 19:39:35.493: E/AndroidRuntime(19398):    at android.view.View.<init>(View.java:1920)
02-26 19:39:35.493: E/AndroidRuntime(19398):    at android.view.View.<init>(View.java:1969)
02-26 19:39:35.493: E/AndroidRuntime(19398):    at android.view.ViewGroup.<init>(ViewGroup.java:314)
02-26 19:39:35.493: E/AndroidRuntime(19398):    at android.widget.AdapterView.<init>(AdapterView.java:228)
02-26 19:39:35.493: E/AndroidRuntime(19398):    at android.widget.AbsListView.<init>(AbsListView.java:605)
02-26 19:39:35.493: E/AndroidRuntime(19398):    at android.widget.ListView.<init>(ListView.java:164)
02-26 19:39:35.493: E/AndroidRuntime(19398):    at android.widget.ListView.<init>(ListView.java:160)
02-26 19:39:35.493: E/AndroidRuntime(19398):    at android.widget.ListView.<init>(ListView.java:156)
02-26 19:39:35.493: E/AndroidRuntime(19398):    at com.thumbsupstudio.mobitour.RoutesListActivity.onCreate(RoutesListActivity.java:18)
02-26 19:39:35.493: E/AndroidRuntime(19398):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072)
02-26 19:39:35.493: E/AndroidRuntime(19398):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1836)
02-26 19:39:35.493: E/AndroidRuntime(19398):    ... 11 more

更新

问题出在ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(null, 0);

如何正确初始化ArrayAdapter?

4 个答案:

答案 0 :(得分:0)

您是否在RoutesListActivity注册了AndroidManifest.xml?如果没有,那么在清单文件中添加这些行

    <activity android:name=".RoutesListActivity" android:label="@string/app_name"></activity>

答案 1 :(得分:0)

我相信NullPointerException来自if(type == "Routes")句子。如果要检查两个字符串中的内容是否相同,则应使用StringA.equals(StringB),而不是StringA==StringB

因此type == "Routes"将始终返回false,因此列表视图尚未正确实例化,arrayAdapter变为NULL。这就是你得到NullPointerException的原因。

答案 2 :(得分:0)

在您的代码中

尝试类似:

public class RoutesListActivity extends Activity{
@Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    try{ 
    String type= getIntent().getCharSequenceExtra("type").toString();
    }catch (Exception e) { Log.e("this is why ..."); }
...

答案 3 :(得分:0)

您正尝试使用行

中的空上下文初始化ArrayAdapter
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(null, 0);

改为通过RoutesListActivity.this