意图错误无法从另一个活动接收值然后强制关闭

时间:2014-02-28 01:38:55

标签: android android-intent

任何人都可以帮助,我的程序强制关闭,是否为nullpointer错误或其他什么,因为它无法从另一个类获取值。谁能告诉我哪里出错了?

这是给予者

if(position == 0){

  Intent i = new Intent(ListKategoriKUHAP.this, PasalbyKatUndangKUHAP.class);
  i.putExtra("value1", "1");
     startActivity(i);

}
else
{
if(position == 1){

     Intent i = new Intent(ListKategoriKUHAP.this, PasalbyKatUndangKUHAP.class);
     i.putExtra("value1", "2");
     startActivity(i);

 }

这是接收器

private void setData()
{
     Bundle extras = getIntent().getExtras();
    if (extras != null) 
    {
        String value = extras.getString("value1");
    if(value=="1")
        {
            listKamus = dbHelper.getAllPasalBab1();
        }
     }

    adapter = new ArrayAdapter<Data>(this,
            android.R.layout.simple_expandable_list_item_1, listKamus);
    lv.setAdapter(adapter);

}

getAllPasalBab1()没有问题我已经尝试过修改代码,但是当我使用intent时它会给出一个错误的空指针。有人可以帮帮我吗?

这是logcat

02-27 20:20:28.460: E/AndroidRuntime(1750): FATAL EXCEPTION: main

02-27 20:20:28.460: E/AndroidRuntime(1750): Process: com.example.KUHP_KUHAP_KUHperdata, PID: 1750

02-27 20:20:28.460: E/AndroidRuntime(1750): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.KUHP_KUHAP_KUHperdata/com.example.KUHP_KUHAP_KUHperdata.PasalbyKatUndangKUHAP}: java.lang.NullPointerException

02-27 20:20:28.460: E/AndroidRuntime(1750):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)

02-27 20:20:28.460: E/AndroidRuntime(1750):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)

02-27 20:20:28.460: E/AndroidRuntime(1750):     at android.app.ActivityThread.access$800(ActivityThread.java:135)

02-27 20:20:28.460: E/AndroidRuntime(1750):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)

02-27 20:20:28.460: E/AndroidRuntime(1750):     at android.os.Handler.dispatchMessage(Handler.java:102)

02-27 20:20:28.460: E/AndroidRuntime(1750):     at android.os.Looper.loop(Looper.java:136)

02-27 20:20:28.460: E/AndroidRuntime(1750):     at android.app.ActivityThread.main(ActivityThread.java:5017)

02-27 20:20:28.460: E/AndroidRuntime(1750):     at java.lang.reflect.Method.invokeNative(Native Method)

02-27 20:20:28.460: E/AndroidRuntime(1750):     at java.lang.reflect.Method.invoke(Method.java:515)

02-27 20:20:28.460: E/AndroidRuntime(1750):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)

02-27 20:20:28.460: E/AndroidRuntime(1750):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)

02-27 20:20:28.460: E/AndroidRuntime(1750):     at dalvik.system.NativeStart.main(Native Method)

02-27 20:20:28.460: E/AndroidRuntime(1750): Caused by: java.lang.NullPointerException

02-27 20:20:28.460: E/AndroidRuntime(1750):     at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:330)

02-27 20:20:28.460: E/AndroidRuntime(1750):     at android.widget.ListView.setAdapter(ListView.java:480)

02-27 20:20:28.460: E/AndroidRuntime(1750):     at com.example.KUHP_KUHAP_KUHperdata.PasalbyKatUndangKUHAP.setData(PasalbyKatUndangKUHAP.java:215)

02-27 20:20:28.460: E/AndroidRuntime(1750):     at com.example.KUHP_KUHAP_KUHperdata.PasalbyKatUndangKUHAP.onCreate(PasalbyKatUndangKUHAP.java:34)

02-27 20:20:28.460: E/AndroidRuntime(1750):     at android.app.Activity.performCreate(Activity.java:5231)

02-27 20:20:28.460: E/AndroidRuntime(1750):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)

02-27 20:20:28.460: E/AndroidRuntime(1750):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)

02-27 20:20:28.460: E/AndroidRuntime(1750):     ... 11 more

2 个答案:

答案 0 :(得分:1)

当extras等于null或listKamus不等于null时,value可能为1,因为如果条件失败则不会初始化listKamus在传递给适配器之前设置适配器内部if块或初始化listKamus

  // initialize listKamus here
listKamus=.....;
if (extras != null) 
{
    String value = extras.getString("value1");
if(value=="1")
    {
        listKamus = dbHelper.getAllPasalBab1();
         // or set ListView Adapter here
     }
 }

或使用equals代替==来比较字符串值。

答案 1 :(得分:0)

我不知道这是否会有所帮助,但您的列表listkamus将变为空。尝试使用value方法比较equals(String),然后尝试这个小修正:

listkamus作为您的类变量,然后

private void setData()
{
    Intent mIntent = getIntent();
    if (mIntent != null) 
    {
        String value = mIntent.getStringExtra("value1");
        if(value.equals("1"))
        {
            listKamus = dbHelper.getAllPasalBab1();
        }
     }

    adapter = new ArrayAdapter<Data>(this,
            android.R.layout.simple_expandable_list_item_1, listKamus);
    lv.setAdapter(adapter);
}