2012-09-28 43 views
1

使用SharedPreferences,此活動在啓動時崩潰。首先,我將發佈活動代碼,然後發佈我的LogCat。非常感謝你們,你們總是幫助很大! :-)Android:NullPointerException使用SharedPreferences

活動代碼;

package com.creativecoders.gymbuddy; 

import com.creativecoders.gymbuddy.R; 

import android.app.Activity; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.EditText; 
import android.widget.TextView; 

public class Benchmark extends Activity { 

public static final String GB_PREFERENCES_BENCH = "Bench"; 
public static final String GB_PREFERENCES_FLIES = "Flies"; 

SharedPreferences settings = getSharedPreferences("gBValues", 
    Context.MODE_PRIVATE); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_benchmark); 
    } 

public void onStart() { 
    super.onStart(); 

    findViewById(R.id.button5).setOnClickListener(new handleButton5()); 

} 

class handleButton5 implements OnClickListener { 
    public void onClick(View v) { 

     EditText editText1 = (EditText)findViewById(R.id.editText1); 
     String sWeight = editText1.getText().toString(); 
     final double dWeight = Double.parseDouble(sWeight); 

     EditText editText2 = (EditText)findViewById(R.id.editText2); 
     String sPush = editText2.getText().toString(); 
     final double dPush = Double.parseDouble(sPush); 

     EditText editText3 = (EditText)findViewById(R.id.editText3); 
     String sSit = editText3.getText().toString(); 
     final double dSit = Double.parseDouble(sSit); 

     EditText editText4 = (EditText)findViewById(R.id.editText4); 
     String sPull = editText4.getText().toString(); 
     final double dPull = Double.parseDouble(sPull); 

     double dBench = (((Math.floor(dWeight*.0664))*10)-10)+dPush; 
     double dFlies = (Math.floor(((Math.floor(dBench*.6)/10)*10))); 

     int iBench = (int)dBench; 
     int iFlies = (int)dFlies; 

     String sBench = "" + iBench; 
     String sFlies = "" + iFlies; 

     SharedPreferences.Editor editor1 = settings.edit(); 
     editor1.putString(GB_PREFERENCES_BENCH, sBench); 
     editor1.commit(); 

     SharedPreferences.Editor editor2 = settings.edit(); 
     editor2.putString(GB_PREFERENCES_FLIES, sFlies); 
     editor2.commit(); 

     TextView TextView1 = (TextView)findViewById(R.id.textView1); 
     TextView1.setText(String.valueOf("Bench Press "+ iBench +" lbs")); 

     TextView TextView2 = (TextView)findViewById(R.id.textView2); 
     TextView2.setText(String.valueOf("Bar Curls "+ iCurls +" lbs")); 
     } 
    } 

} 

這是我的LogCat;

09-28 21:18:52.636: E/AndroidRuntime(686): FATAL EXCEPTION: main 
09-28 21:18:52.636: E/AndroidRuntime(686): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.creativecoders.gymbuddy/com.creativecoders.gymbuddy.Benchmark}: java.lang.NullPointerException 
09-28 21:18:52.636: E/AndroidRuntime(686): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1879) 
09-28 21:18:52.636: E/AndroidRuntime(686): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980) 
09-28 21:18:52.636: E/AndroidRuntime(686): at android.app.ActivityThread.access$600(ActivityThread.java:122) 
09-28 21:18:52.636: E/AndroidRuntime(686): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 
09-28 21:18:52.636: E/AndroidRuntime(686): at android.os.Handler.dispatchMessage(Handler.java:99) 
09-28 21:18:52.636: E/AndroidRuntime(686): at android.os.Looper.loop(Looper.java:137) 
09-28 21:18:52.636: E/AndroidRuntime(686): at android.app.ActivityThread.main(ActivityThread.java:4340) 
09-28 21:18:52.636: E/AndroidRuntime(686): at java.lang.reflect.Method.invokeNative(Native Method) 
09-28 21:18:52.636: E/AndroidRuntime(686): at java.lang.reflect.Method.invoke(Method.java:511) 
09-28 21:18:52.636: E/AndroidRuntime(686): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
09-28 21:18:52.636: E/AndroidRuntime(686): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
09-28 21:18:52.636: E/AndroidRuntime(686): at dalvik.system.NativeStart.main(Native Method) 
09-28 21:18:52.636: E/AndroidRuntime(686): Caused by: java.lang.NullPointerException 
09-28 21:18:52.636: E/AndroidRuntime(686): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:153) 
09-28 21:18:52.636: E/AndroidRuntime(686): at com.creativecoders.gymbuddy.Benchmark.<init>(Benchmark.java:35) 
09-28 21:18:52.636: E/AndroidRuntime(686): at java.lang.Class.newInstanceImpl(Native Method) 
09-28 21:18:52.636: E/AndroidRuntime(686): at java.lang.Class.newInstance(Class.java:1319) 
09-28 21:18:52.636: E/AndroidRuntime(686): at android.app.Instrumentation.newActivity(Instrumentation.java:1023) 
09-28 21:18:52.636: E/AndroidRuntime(686): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1870) 
09-28 21:18:52.636: E/AndroidRuntime(686): ... 11 more 

回答

7

您必須訪問共享首選項AFTER onCreate被調用。否則背景將是空:)這就是爲什麼你得到一個空指針異常

移動這一行:

SharedPreferences settings = getSharedPreferences("gBValues", 
    Context.MODE_PRIVATE); 

在OnCreate()

+0

您先生..應得獎勵;接受的答案如何發聲? :) (當然在6分鐘) –

+0

:D謝謝,很高興它幫助。 –

1

移動設置實例的實例變量到你的onCreate方法中。在super.onCreate調用之後。

你現在正在做的方式是將它設置爲空;

1
public class MainActivity extends Activity{ 

SharedPreferences sharedpreferences;  

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

sharedpreferences = getSharedPreferences("preferences", Context.MODE_PRIVATE); 

      editor.putBoolean("sharedpreferences", true); 
      editor.commit(); 

// your code ... 

} 

// your code ... 
}