2014-05-04 22 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