Исключение нулевого указателя при попытке доступа к атрибуту объекта, переданного из другого действия в Android - PullRequest
0 голосов
/ 13 февраля 2012

Я передаю объект из деятельности другому.Затем от этой деятельности к другой.Когда я пытаюсь получить доступ к атрибуту переданного объекта из третьего действия, я получаю исключение нулевого указателя.

Я также установил атрибут.Так что я не понимаю причину этого.

Код из первого упражнения:

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

Из 3-го упражнения:

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

Ответы [ 3 ]

0 голосов
/ 13 февраля 2012

Если все эти действия относятся к одному и тому же приложению, я бы порекомендовал вам просто расширить класс Application с помощью собственного пользовательского класса приложения, в котором хранится этот объект, который сохраняется во всем приложении (если он не прерывается, а затем закрывается, прочитайте комментарий Архимеда ниже). Это гораздо более надежное решение, поскольку оно устойчиво к жизненным циклам активности.

Вот ссылка, которая должна помочь в реализации этого: https://stackoverflow.com/a/708317/220710

0 голосов
/ 13 февраля 2012

Поддерживает ли ваша активность жизненный цикл?Похоже, нет.Если вы оставите, скажем, действие A в пользу действия B (таким образом, стек действий A> B), то, как только действие A станет невидимым, ОС может принять решение убить его (есть хаки, чтобы предотвратить это, но это хакитак что вам лучше их избегать).Поэтому, когда вы вернетесь к действию A из B, ОС восстановит действие A за вас (однако именно вы несете ответственность за поддержание надлежащего состояния активности - API действий имеет специальные обратные вызовы для этого - сохраняйте / восстанавливайте свои задачи в техточки).Вот официальное руководство по этому вопросу: Управление жизненным циклом активности .

0 голосов
/ 13 февраля 2012

Возникает ли исключение нулевого указателя, потому что объект t равен нулю ?!Выглядит так.Убедитесь, что вы создаете t где-то.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...