簡體   English   中英

嘗試訪問從Android中的另一個活動傳遞的對象屬性時出現空指針異常

[英]Null pointer exception when trying to access an object's atribute passed from another activity in android

我正在將一個對象從活動傳遞到另一個。 然后從該活動轉到另一活動。 當我嘗試從第3個活動訪問傳遞的對象的屬性時,出現空指針異常。

我也設置了屬性。 所以我不明白原因。

第一個活動的代碼:

private Task t;

public void onClick(View v) {

    if(v == this.btnAdd){
        this.addItem(this.txtTask.getText().toString());
        this.addTask(this.txtTask.getText().toString());
    }

}

private void addTask(String taskName){
    if(taskName.length()>0){
        t = new Task(taskName);

        this.tasks.add(t);
    }
}

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


        Intent myIntent = new Intent(getApplicationContext(), TabSwitch.class);
        myIntent.putExtra("taskItem", t);
            startActivity(myIntent);
        }

    });

從第二個活動:

private TextView selectedTask;

Intent i=getIntent();

    Task taskItem = (Task) i.getSerializableExtra("taskItem");


    i = new Intent().setClass(this, Info.class);
    i.putExtra("taskItem", taskItem);

在第三項活動中:

Intent i=getIntent();
Task task =(Task) i.getSerializableExtra("taskItem");

selectedTask.setText(task.getTaskName());

這是日志:

02-13 22:03:02.868: E/AndroidRuntime(572): FATAL EXCEPTION: main
02-13 22:03:02.868: E/AndroidRuntime(572): java.lang.RuntimeException: Unable to start activity ComponentInfo{sam.todo.OnTime/sam.todo.OnTime.TabSwitch}: java.lang.RuntimeException: Unable to start activity ComponentInfo{sam.todo.OnTime/sam.todo.OnTime.Info}: java.lang.NullPointerException
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.os.Handler.dispatchMessage(Handler.java:99)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.os.Looper.loop(Looper.java:123)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.ActivityThread.main(ActivityThread.java:3683)
02-13 22:03:02.868: E/AndroidRuntime(572):  at java.lang.reflect.Method.invokeNative(Native Method)
02-13 22:03:02.868: E/AndroidRuntime(572):  at java.lang.reflect.Method.invoke(Method.java:507)
02-13 22:03:02.868: E/AndroidRuntime(572):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-13 22:03:02.868: E/AndroidRuntime(572):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-13 22:03:02.868: E/AndroidRuntime(572):  at dalvik.system.NativeStart.main(Native Method)
02-13 22:03:02.868: E/AndroidRuntime(572): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{sam.todo.OnTime/sam.todo.OnTime.Info}: java.lang.NullPointerException
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.ActivityThread.startActivityNow(ActivityThread.java:1487)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:654)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.widget.TabHost.setCurrentTab(TabHost.java:326)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.widget.TabHost.addTab(TabHost.java:216)
02-13 22:03:02.868: E/AndroidRuntime(572):  at sam.todo.OnTime.TabSwitch.onCreate(TabSwitch.java:30)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
02-13 22:03:02.868: E/AndroidRuntime(572):  ... 11 more
02-13 22:03:02.868: E/AndroidRuntime(572): Caused by: java.lang.NullPointerException
02-13 22:03:02.868: E/AndroidRuntime(572):  at sam.todo.OnTime.Info.onCreate(Info.java:34)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
02-13 22:03:02.868: E/AndroidRuntime(572):  ... 20 more

是否由於對象t為空而引發了空指針異常? 看起來像那樣。 確保在某處創建t

如果所有這些活動都在同一個應用程序下,則建議您簡單地使用您自己的自定義應用程序類擴展Application類,該自定義應用程序類將存儲在整個應用程序中持久存在的對象(除非它被中斷然后關閉,請閱讀下面的Arhimed的注釋) 。 這是一個更加健壯的解決方案,因為它可以適應活動生命周期。

這是應該有助於實現此目的的鏈接: https : //stackoverflow.com/a/708317/220710

您的活動是否正確維持其生命周期? 看起來好像不是。 例如,如果您離開活動A而不是活動B(因此活動堆棧為A> B),那么一旦活動A變得不可見,則操作系統可能會決定殺死它(有黑客可以阻止它,但這些都是黑客) ,因此最好避免使用它們。 因此,當您從B重新回到活動A時,操作系統將為您還原活動A(但是,負責適當的活動狀態維護的是您-活動API具有特殊的回調-在這些位置持久/恢復您的任務點)。 這是關於此的官方教程: 管理活動生命周期

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM