我正在尝试按下按钮启动新活动。
主要活动代码:
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?
答案 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
。