Android打算返回Nullpointerexception

Android打算返回Nullpointerexception,android,android-intent,nullpointerexception,Android,Android Intent,Nullpointerexception,我希望在传递意图时获得一些关于如何解决NullPointerException问题的指导。我想创建一个列表视图,我可以在其中进一步单击以显示一些相关信息。所以基本上主列表可以运行,但是当我点击条目时,它就崩溃了 我检查过LogCat,它说我有Nullpointerexception,我不熟悉如何检查/查找Null变量。我认为我的mRowId为null,但我不知道如何将其设置为定义值 有人能帮我找出下面的问题吗 传递意图的主文件如下所示 @Override public void onListIt

我希望在传递意图时获得一些关于如何解决NullPointerException问题的指导。我想创建一个列表视图,我可以在其中进一步单击以显示一些相关信息。所以基本上主列表可以运行,但是当我点击条目时,它就崩溃了

我检查过LogCat,它说我有Nullpointerexception,我不熟悉如何检查/查找Null变量。我认为我的mRowId为null,但我不知道如何将其设置为定义值

有人能帮我找出下面的问题吗

传递意图的主文件如下所示

@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)));

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

@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
你在这里设置了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
}

每当出现异常时,它都会声明发生异常的行号。logcat输出表示Nullpointerexception是在fetchDruge()处创建的,我认为我传入的mRowId很可能是一个空的开头…感谢您的回复。是的,我删除了它并运行了它,它仍然以一个nullpointerexception结束。我确定mRowId确实是空的,但是我不知道如何将它指向某个东西!!!只是去掉那些线是行不通的。我已经更新了最初的评论来解释我的意思。谢谢!我真的是个新手,我尝试了你上面发布的方法,我推断savedInstanceState为null。。。不管怎么说,我都无法从上面抓起mRowId来纠正这一点