2011-05-26 86 views
0

我希望在传递intent时如何解决NullPointerException上的问题。我想创建一个列表视图,我可以点击进一步显示一些相关的信息。所以基本上主要的列表能够运行,但是当我点击该条目时,它只是崩溃。返回Nullpointerexception的Android意图

我检查过LogCat,它说我有Nullpointerexception,我不熟悉如何检查/查找空变量。我认为我的mRowId为空,但我不知道如何将它定义为一个定义的值。

任何人都可以帮助我发现意图传递下面的问题?

传递意图的主要文件是这样的。

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 

    Intent i = new Intent(this, drugdetail.class); 
    i.putExtra(DrugsDbAdapter.KEY_ROWID, id); 

    startActivity(i); 
} 

读取意图的第二个文件是这样的。

package com.paad.medboxsd; 

public class drugdetail extends Activity{ 

private TextView mDrugText; 
private TextView mContentText; 

private Long mRowId; 

    DrugsDbAdapter.DatabaseHelper mDbHelper = new DrugsDbAdapter.DatabaseHelper(this); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.drug_info); 

     mDrugText = (TextView) findViewById(R.id.drug); 
     mContentText = (TextView) findViewById(R.id.content); 

     //potentially where the problem on Nullpointers lie where LogCat says null pointer exception from fetchDrugs(). Meaning likely that mRowId is Null. 
     //mRowId = savedInstanceState != null ? savedInstanceState.getLong(DrugsDbAdapter.KEY_ROWID) : null; 

     Bundle extras = getIntent().getExtras(); 

     mRowId = extras.getLong(DrugsDbAdapter.KEY_ROWID); 

     Cursor drug = mDbHelper.fetchDrug(mRowId); 

     //Managing Cursor to pluck values to display 
     startManagingCursor(drug); 

     mDrugText.setText(drug.getString(drug.getColumnIndexOrThrow(DrugsDbAdapter.KEY_DRUG))); 

     mContentText.setText(drug.getString(drug.getColumnIndexOrThrow(DrugsDbAdapter.KEY_CONTENT))); 

    } 

的logcat的输出是:

05-26 15:27:48.698: ERROR/AndroidRuntime(4829): FATAL EXCEPTION: main 
05-26 15:27:48.698: ERROR/AndroidRuntime(4829): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.paad.medboxsd/com.paad.medboxsd.drugdetail}: java.lang.NullPointerException 
05-26 15:27:48.698: ERROR/AndroidRuntime(4829):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
05-26 15:27:48.698: ERROR/AndroidRuntime(4829):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
05-26 15:27:48.698: ERROR/AndroidRuntime(4829):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
05-26 15:27:48.698: ERROR/AndroidRuntime(4829):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
05-26 15:27:48.698: ERROR/AndroidRuntime(4829):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-26 15:27:48.698: ERROR/AndroidRuntime(4829):  at android.os.Looper.loop(Looper.java:123) 
05-26 15:27:48.698: ERROR/AndroidRuntime(4829):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
05-26 15:27:48.698: ERROR/AndroidRuntime(4829):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-26 15:27:48.698: ERROR/AndroidRuntime(4829):  at java.lang.reflect.Method.invoke(Method.java:521) 
05-26 15:27:48.698: ERROR/AndroidRuntime(4829):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
05-26 15:27:48.698: ERROR/AndroidRuntime(4829):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
05-26 15:27:48.698: ERROR/AndroidRuntime(4829):  at dalvik.system.NativeStart.main(Native Method) 
05-26 15:27:48.698: ERROR/AndroidRuntime(4829): Caused by: java.lang.NullPointerException 
05-26 15:27:48.698: ERROR/AndroidRuntime(4829):  at com.paad.medboxsd.DrugsDbAdapter$DatabaseHelper.fetchDrug(DrugsDbAdapter.java:195) 
05-26 15:27:48.698: ERROR/AndroidRuntime(4829):  at com.paad.medboxsd.drugdetail.onCreate(drugdetail.java:35) 
05-26 15:27:48.698: ERROR/AndroidRuntime(4829):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
05-26 15:27:48.698: ERROR/AndroidRuntime(4829):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
05-26 15:27:48.698: ERROR/AndroidRuntime(4829):  ... 11 more 
+1

每当有它总是指出其所发生的行号的异常。 – Reno 2011-05-26 07:40:01

+0

提供logcat输出 – 2011-05-26 07:43:11

+0

logcat输出说Nullpointerexception是在fetchDrug()创建的,我认为它传递给我的mRowId可能是NULL ... – jamen 2011-05-26 07:53:06

回答

0

您设置mRowId这里

mRowId = savedInstanceState != null ? savedInstanceState.getLong(DrugsDbAdapter.KEY_ROWID) : null; 

但然后立即重新设置在这里

Bundle extras = getIntent().getExtras(); 
    mRowId = extras.getLong(DrugsDbAdapter.KEY_ROWID); 

,并使用它,而不检查如果它为空或不是。


这样做:

mRowId = (savedInstanceState != null) ? 
    savedInstanceState.getLong(DrugsDbAdapter.KEY_ROWID) : null; 
if (mRowId == null) 
{ 
    Bundle extras = getIntent().getExtras(); 
    mRowId = (extras != null) ? extras.getLong(DrugsDbAdapter.KEY_ROWID) : null; 
} 

if (mRowId != null) 
{ 
    //database stuff here 
} 
else 
{ 
    //error handling here 
} 
+0

感谢您的回复。是的,我已经删除它并运行它,它仍然以nullpointerexception结束。我敢肯定,mRowId真的是空的,但我不知道如何让它指向某些东西! – jamen 2011-05-26 10:10:20

+0

只是删除这些行将无法正常工作。我已更新原始评论以解释我的意思。 – 2011-05-26 12:38:34

+0

谢谢!我真的很陌生,使用它,我已经尝试了上面发布的方法,并且我推断savedInstanceState为空...无论如何要纠正,因为我无法将mRowId关闭 – jamen 2011-05-26 13:07:26

相关问题