2011-03-13 35 views
0

我對Android開發非常陌生,我對NullPointerException有個疑問。當從第一個活動頁面按下按鈕時,它將切換到第二個活動,其中有一個NullPointerException。 下面是main.xml中「下一個」按鈕(這是按壓以切換活動的那一個)的代碼:更改活動時出現NullPointerException

<Button 
      android:id="@+id/ButtonNext" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/next" 
      android:onClick="next"> 
     </Button> 

下面是所述第一活動的代碼:

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 

public class CalorieIntakeCalculator extends Activity { 
    /** Called when the activity is first created. */ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 

    } 

    public void next(View view) { 
     Intent intentExercise = new Intent(view.getContext(), Exercise.class); 
     startActivityForResult(intentExercise, 0); 
    } 
} 

當「下一個」按鈕,它切換到練習活動:

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 

public class Exercise extends Activity { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.exercise); 

     final EditText weightField = (EditText) findViewById(R.id.EditTextWeight); 
     try { 
      ((Global) this.getApplication()).setWeight(Integer.parseInt(weightField.getText().toString())); 
     } catch(NumberFormatException nfe) { 
      System.out.println("Could not parse " + nfe); 
     } 

在練習課,我將ContentView設置爲exercise.xml。 在接下來的幾條語句中,我想將全局整數權重設置爲用戶放入EditTextWeight EditText框中的數字。 這裏是在Global.java文件,它擴展Appllication代碼,使全局變量:

import android.app.Application; 

public class Global extends Application { 
    private int weight; 
    private int age; 
    private int feet; 
    private int inches; 


     //START WEIGHT 
     public int getWeight() { 
      return weight; 
     } 

     public void setWeight(int weight) { 
      this.weight = weight; 
     } 
     //END WEIGHT 


     //START AGE 
     public int getAge() { 
      return age; 
     } 

     public void setAge(int age) { 
      this.age = age; 
     } 
     //END AGE 


     //START FEET 
     public int getFeet() { 
      return feet; 
     } 

     public void setFeet(int feet) { 
      this.feet = feet; 
     } 
     //END FEET 


     //START INCHES 
     public int getInches() { 
      return inches; 
     } 

     public void setInches(int inches) { 
      this.inches = inches; 
     } 
     //END INCHES 
} 

當我嘗試,並在模擬器中運行的程序,該程序崩潰。我看着在logcat中,發現NullPointerException使用斷點在此行中exercise.java:

((Global) this.getApplication()).setWeight(Integer.parseInt(weightField.getText().toString())); 

謝謝〜:)

回答

1

如果你想在你的應用程序保持狀態,我強烈建議尋找到SharedPrefrences系統。

在應用程序的任何活動或服務,您可以通過訪問共享偏好:

final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 

您也可以輕鬆地進行PreferencesActivity更改設置,而無需編寫大量代碼。

+1

非常感謝!它似乎會對我有用:) 不幸的是,我可能不得不重新編寫所有的代碼大聲笑。但是,我會研究它:D – koysean 2011-03-13 20:04:34

1

空指針異常的一般提示。

  1. 打開在Eclipse
  2. Debug透視圖選擇 '斷點' 視圖選項卡。
  3. 選擇'添加Java異常斷點'並選擇 NullPointerException。
  4. 通過使用「Debug As ...」或通過DDMS將調試器附加到正在運行的實例來啓動您的活動。
  5. 執行違規工作流程。它會打破 造成的NPE。
+0

修復了我遇到的問題 - 謝謝! – 2013-11-06 16:15:29

相關問題