2014-05-04 20 views
1

我一直在阅读有关此问题的不同问题和答案,但我仍然无法得知线索。我真的很抱歉,因为我知道这个问题是重复,但我真的需要帮助:(回到操作栏时,应用程序意外停止

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

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); 
    } 
+0

这堂课的第35行是什么? (请参阅错误:* com.FYP.undergraduate.ChooseSubject.onCreate(ChooseSubject.java:35)*) – Fllo

+0

35行是“loginID = getIntent()。getExtras()。getString(”LOGINID“);” – PhoebeC

+0

所以它就是这样。 getIntent()为null或getExtras()的意图为null。现在,你可以找出其余的。 – Nazgul

回答

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; 

我怀疑你做另一个Intent当你在“向上”的活动,返回ChooseSubject那么活动没有从这个DATAS新的意图,因为通常你做这个调用ChooseSubject活动:

Intent i = new Intent(PreviousActivity.this, ChooseSubject.class); 
// pass the datas 
i.putString("LOGINID", loginIdStringValue); 
// then, call startActivity method 
startActivity(i); 

而且在你再次调用startActivity(重新)推出ChooseSubject类的情况下,你有没有传递任何DATAS。当活动首次显示时,会调用onCreategetIntent。当您有另一项活动启动时,您可以返回到之前的活动,而无需再次调用这些方法,其中finish()

也许你应该存储发送的值以避免空的异常。当您查看有关Activity Lifecycle的文档时,您会看到onCreate仅在活动不再可见并且另一个应用程序需要内存时才会调用。然而,根据该Documentation

The system uses the Bundle instance state to save information about each View object in your activity layout (such as the text value entered into an EditText object). So, if your activity instance is destroyed and recreated, the state of the layout is restored to its previous state with no code required by you.

然后,可以如下存储值:

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

This method放置活性这样的背景状态之前被调用。你可以检索内部onCreate这些值它采用了Bundle像参数:,一个解决办法可能是使用SharedPreference将其存储在设备上

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_choose_subject); 

    // Check the state of the activity bundle 
    if(savedInstanceState != null) { // the activity has already be created 
     loginID = savedInstanceState.getString("SAVED_LOGINID"); 
     role = savedInstanceState.getInt("SAVED_ROLE"); 
    } else { // the activity is displayed for the 1st time 
     loginID = getIntent().getExtras().getString("LOGINID"); 
     role = getIntent().getExtras().getInt("ROLE"); 
    } 
    //... 
} 

在你需要内部的其他活动的值的情况下,也见Saving Persistent State部分。但是,您可以在Storage Options上看到其他一些功能。

它可能会解决您的问题,我希望这可以帮助。
让我知道如果你需要更多的信息。

+0

非常感谢!这解决了我的问题!谢谢〜 – PhoebeC