当使用操作栏返回时,应用程序意外停止

时间:2014-05-04 17:46:12

标签: java android

我一直在阅读有关此问题的不同问题和答案,但我仍然没有得到线索。我真的很抱歉,因为我知道这个问题会重复,但我真的需要帮助:(

每当我在操作栏中按下后面时,应用程序意外停止。

05-05 01:39:03.685: E/AndroidRuntime(10591): FATAL EXCEPTION: main
05-05 01:39:03.685: E/AndroidRuntime(10591): Process: com.FYP.undergraduate, PID: 10591
05-05 01:39:03.685: E/AndroidRuntime(10591): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.FYP.undergraduate/com.FYP.undergraduate.ChooseSubject}: java.lang.NullPointerException
05-05 01:39:03.685: E/AndroidRuntime(10591):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305)
05-05 01:39:03.685: E/AndroidRuntime(10591):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
05-05 01:39:03.685: E/AndroidRuntime(10591):    at android.app.ActivityThread.access$900(ActivityThread.java:161)
05-05 01:39:03.685: E/AndroidRuntime(10591):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
05-05 01:39:03.685: E/AndroidRuntime(10591):    at android.os.Handler.dispatchMessage(Handler.java:102)
05-05 01:39:03.685: E/AndroidRuntime(10591):    at android.os.Looper.loop(Looper.java:157)
05-05 01:39:03.685: E/AndroidRuntime(10591):    at android.app.ActivityThread.main(ActivityThread.java:5356)
05-05 01:39:03.685: E/AndroidRuntime(10591):    at java.lang.reflect.Method.invokeNative(Native Method)
05-05 01:39:03.685: E/AndroidRuntime(10591):    at java.lang.reflect.Method.invoke(Method.java:515)
05-05 01:39:03.685: E/AndroidRuntime(10591):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
05-05 01:39:03.685: E/AndroidRuntime(10591):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
05-05 01:39:03.685: E/AndroidRuntime(10591):    at dalvik.system.NativeStart.main(Native Method)
05-05 01:39:03.685: E/AndroidRuntime(10591): Caused by: java.lang.NullPointerException
05-05 01:39:03.685: E/AndroidRuntime(10591):    at com.FYP.undergraduate.ChooseSubject.onCreate(ChooseSubject.java:35)
05-05 01:39:03.685: E/AndroidRuntime(10591):    at android.app.Activity.performCreate(Activity.java:5426)
05-05 01:39:03.685: E/AndroidRuntime(10591):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
05-05 01:39:03.685: E/AndroidRuntime(10591):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
05-05 01:39:03.685: E/AndroidRuntime(10591):    ... 11 more
05-05 01:39:06.175: I/Process(10591): Sending signal. PID: 10591 SIG: 9
05-05 01:39:06.340: W/ApplicationPackageManager(11234): getCSCPackageItemText()

这是类ChooseSubject.java的部分编码。

package com.FYP.undergraduate;

import java.io.IOException;
import java.io.InputStream;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.*;
import android.app.Activity;
import android.view.*;
import android.view.View.OnClickListener;
import android.widget.*;
import android.support.v4.app.NavUtils;
import android.annotation.TargetApi;
import android.content.Intent;

public class ChooseSubject extends Activity 
{
    String loginID;
    ProgressBar spinner1;
    int role;

    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_choose_subject);
        setupActionBar();
        loginID = getIntent().getExtras().getString("LOGINID");
        role = getIntent().getExtras().getInt("ROLE");
        new MyGetSubjectClass().execute();
        spinner1 = (ProgressBar)findViewById(R.id.progressBar1);
    }

    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    private void setupActionBar() 
    {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) 
        {
            getActionBar().setDisplayHomeAsUpEnabled(true);
        }
    }

    public boolean onCreateOptionsMenu(Menu menu) 
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.choose_subject, menu);
        return true;
    }

    public boolean onOptionsItemSelected(MenuItem item) 
    {
        switch (item.getItemId()) 
        {
            case android.R.id.home:
            NavUtils.navigateUpFromSameTask(this);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

1 个答案:

答案 0 :(得分:1)

重要的是,我建议您不要在Android中使用navigateUpFromSameTask,因为有a known bug on 4.1 and higher。对于“向上”活动,您只需调用finish()方法即可销毁当前活动并自动返回到父活动:

case android.R.id.home:
    this.finish(); // the "up" activity will be destroyed
    return true;  

我怀疑你在“up”活动时再做Intent以返回ChooseSubject然后活动没有来自这个新Intent的数据,因为通常你这样做是为了调用{{ 1}}活动:

ChooseSubject

如果您再次调用Intent i = new Intent(PreviousActivity.this, ChooseSubject.class); // pass the datas i.putString("LOGINID", loginIdStringValue); // then, call startActivity method startActivity(i); 来重新启动startActivity课程,则表示您尚未传递任何数据。第一次显示活动时会调用ChooseSubjectonCreate。当您启动了另一个活动时,您只需使用getIntent再次调用这些方法即可返回上一个活动。

也许您应该存储发送的值以避免出现空异常。当您查看有关Activity Lifecycle的文档时,您会发现仅当活动不再可见且另一个应用需要内存时才会调用finish()。但是,根据Documentation

  

系统使用Bundle实例状态来保存活动布局中每个View对象的信息(例如输入EditText对象的文本值)。因此,如果您的活动实例被销毁并重新创建,则布局的状态将恢复到之前的状态,而您无需代码。

然后,您可以按如下方式存储值:

onCreate
在将活动置于此背景状态之前调用

This method。您可以在@Override public void onSaveInstanceState(Bundle savedInstanceState) { // Save the datas savedInstanceState.putString("SAVED_LOGINID", getIntent().getExtras().getString("LOGINID")); savedInstanceState.putInt("SAVED_ROLE", getIntent().getExtras().getInt("ROLE")); // Always call the superclass so it can save the view hierarchy state super.onSaveInstanceState(savedInstanceState); } 中检索这些值,这些值使用onCreate作为参数,如:

Bundle

如果您需要其他活动中的值,则解决方案可能会使用SharedPreference将其存储在设备上,另请参阅Saving Persistent State部分。但是,您可以在Storage Options上看到其他一些功能。

它可能会解决您的问题,我希望这会有所帮助 如果您需要更多相关信息,请与我们联系。

相关问题