获得NullException

时间:2011-03-16 19:22:21

标签: android crash

  

可能重复:
  NULL Exception in my android program

有一个例外:

03-16 17:47:57.058: ERROR/AndroidRuntime(609): FATAL EXCEPTION: main
03-16 17:47:57.058: ERROR/AndroidRuntime(609): java.lang.RuntimeException: Unable to      destroy activity {com.TravelPharmacy/com.TravelPharmacy.CountryView}: java.lang.NullPointerException
03-16 17:47:57.058: ERROR/AndroidRuntime(609):     at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2636)
03-16 17:47:57.058: ERROR/AndroidRuntime(609):     at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:2654)
03-16 17:47:57.058: ERROR/AndroidRuntime(609):     at android.app.ActivityThread.access$2100(ActivityThread.java:117)
03-16 17:47:57.058: ERROR/AndroidRuntime(609):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:961)
03-16 17:47:57.058: ERROR/AndroidRuntime(609):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-16 17:47:57.058: ERROR/AndroidRuntime(609):     at android.os.Looper.loop(Looper.java:123)
03-16 17:47:57.058: ERROR/AndroidRuntime(609):     at android.app.ActivityThread.main(ActivityThread.java:3647)
03-16 17:47:57.058: ERROR/AndroidRuntime(609):     at java.lang.reflect.Method.invokeNative(Native Method)
03-16 17:47:57.058: ERROR/AndroidRuntime(609):     at java.lang.reflect.Method.invoke(Method.java:507)
03-16 17:47:57.058: ERROR/AndroidRuntime(609):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-16 17:47:57.058: ERROR/AndroidRuntime(609):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-16 17:47:57.058: ERROR/AndroidRuntime(609):     at dalvik.system.NativeStart.main(Native Method)
03-16 17:47:57.058: ERROR/AndroidRuntime(609): Caused by: java.lang.NullPointerException
03-16 17:47:57.058: ERROR/AndroidRuntime(609):     at com.TravelPharmacy.CountryView.onDestroy(CountryView.java:117)
03-16 17:47:57.058: ERROR/AndroidRuntime(609):     at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2623)
03-16 17:47:57.058: ERROR/AndroidRuntime(609): 
    ... 11 more

这是onCreate of First活动,当你按下按钮(fromButton)时,它将调用另一个活动并期望返回该国家的名称

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.home);

   // final int recquestCode = 0;
    final Button btnCountryfrom = (Button) findViewById(R.id.fromButton);
    btnCountryfrom.setOnClickListener(new OnClickListener()
    {

        public void onClick(View v)
        {


            Intent pingIntent = new Intent(getApplicationContext(),CountryView.class);
            pingIntent.putExtra("btnText", " ");
            pingIntent.setClass(TravelPharmacy.this, CountryView.class);
            startActivityForResult(pingIntent, RECEIVE_MESSAGE);
            Log.i("tag for easy filter in logcat 6","I am Working!!!");
            ButtonFromPressed=true;

         }



    }); 
}

获取在其他活动中选择的国家/地区的名称时覆盖 onActivityResult并在按钮

中设置国家/地区的名称
     @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);

     Button btnCountryfrom = (Button) findViewById(R.id.fromButton);


        CharSequence seq = data.getCharSequenceExtra("response");
        btnCountryfrom.setText(seq);
        ButtonFromPressed=false;



    }
}

我的第二个活动的onCreate

    @Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.country);

    mListUsers = getCountry();
    lvUsers = (ListView) findViewById(R.id.countrylistView);
    lvUsers.setAdapter(new ListAdapter(this, R.id.countrylistView, mListUsers)); 



    lvUsers.setOnItemClickListener(new OnItemClickListener()
    {

        public void onItemClick(AdapterView<?> parent, View view,int position, long id)
        {



            Intent pongIntent = new Intent();

            Log.i("tag for easy filter in logcat 1", "information you provide");

            Log.i("tag for easy filter in logcat 2",mListUsers.get(position).pays);

            pongIntent.putExtra("response",mListUsers.get(position).pays);
            setResult(Activity.RESULT_OK,pongIntent);

            finish();
            Log.i("tag for easy filter in logcat 3",mListUsers.get(position).pays);



        }
     });

}

我的第二个活动的onDestroy()。

    @Override
public void onDestroy()
 {

    //     adapter.imageLoader.stopThread();
    //mListUsers=null;


   lv.setAdapter(null);
   super.onDestroy();
 }

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/widget142"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<RelativeLayout
android:id="@+id/widget143"
android:layout_height="33px"
android:background="@color/blue"
android:layout_width="fill_parent">
<ImageButton
android:id="@+id/homeImageButton"
android:layout_width="47px"
android:layout_height="34px"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
>
</ImageButton>
<TextView
android:id="@+id/countryTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Country"
android:textSize="20sp"
android:textStyle="bold"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
>
</TextView>
</RelativeLayout>
<ListView
    android:id="@+id/countrylistView" 
android:layout_width="match_parent" android:layout_height="250px">
</ListView>
</LinearLayout>

我将非常感谢帮助!!!

谢谢!

4 个答案:

答案 0 :(得分:2)

检查R.layout.country上是否存在ListAdapter,看起来你遇到了问题:

findViewById(R.id.countrylistView);

因为您的listView尚未实例化。你能发布国家布局

吗?

答案 1 :(得分:1)

ListAdapter是一个接口,所以你不能新建一个ListAdapter,除非你在某处创建了一个名为ListAdapter的类,这可能是一个坏主意,你应该使用不同的名称。

创建适配器时,传入列表项的布局,而不是ListView的ID。

答案 2 :(得分:1)

由于您已在another帖子中发布了问题,因此很明显问题是lv中的activity从未在您setAdapter中初始化onDestroy() {1}},导致NullPointerException,因为它是null,因为它显示在您的代码片段中:

@Override
public void onDestroy()
 {

    //     adapter.imageLoader.stopThread();
    //mListUsers=null;


   lv.setAdapter(null);
   super.onDestroy();
 }

此外,当您想发布有关您的问题的更多数据时,只需编辑您的问题而不是创建一个新问题:) 我希望这会有所帮助。

答案 3 :(得分:0)

可能是,

mListUser为null或 mListUsers.get(position)为null?