2015-07-11 66 views
-2

我調試我的應用程序,並得到這個errorline:通過SharedPreferences/logcat的錯誤

java.lang.NullPointerException 
     at com.simonic.filmstudio.LogActivity$1.onClick(LogActivity.java:42) 
     at android.view.View.performClick(View.java:4752) 
     at android.view.View$PerformClick.run(View.java:19561) 
     at android.os.Handler.handleCallback(Handler.java:733) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:146) 
     at android.app.ActivityThread.main(ActivityThread.java:5635) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 
     at dalvik.system.NativeStart.main(Native Method) 

Log.Activity.java:42是該行:editor = sharedPrefs.edit();

這是代碼的其餘部分:

package com.simonic.filmstudio; 


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

public class LogActivity extends Activity { 

//Buttons 
Button startbutton; 
//Variablen 
EditText edtext; 
String pname; 
//Daten 
SharedPreferences sharedPrefs; 
SharedPreferences.Editor editor; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 
    //Buttons 
    startbutton = (Button)findViewById(R.id.startbutt); 
    //EDTEXT 
    edtext = (EditText)findViewById(R.id.editText); //SpielerName 
    startbutton.setOnClickListener(new View.OnClickListener() { //Register Start Button 

     @Override 
     public void onClick(View v) { 
      if (edtext.getText().toString().trim().isEmpty()) { 
       Toast toast = new Toast(getApplicationContext()); 
       toast.setGravity(100, 100, 100); 
       String nopname = "@string/nopname"; 
       Toast.makeText(LogActivity.this, nopname, Toast.LENGTH_SHORT).show(); 
      } else { 
       editor = sharedPrefs.edit(); 
       pname = edtext.getText().toString(); 
       editor.putString("pname", pname); 
       editor.putBoolean("regstat", true); 
       editor.apply(); 
       startStudac(); 
      } 
     } 
    }); 
} 

public void startStudac(){ 
    Intent intent = new Intent(LogActivity.this, StudioReg.class); 
    startActivity(intent); 
    overridePendingTransition(R.anim.abc_fade_in, R.anim.abc_fade_out); 
} 

@Override 
protected void onStart() { 
    super.onStart(); 
} 

@Override 
protected void onRestart() { 
    super.onRestart(); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
} 

} 

我希望你能幫我!

回答

0

在分配任何東西之前,您正在使用sharedPrefs。因此,它是零,因此NullPointerException異常

要獲得SharedPreferences參考,因爲你是一個匿名內部類中,你將需要:

sharedPrefs = MyActivity.this.getSharedPreferences(); 

你的情況:

sharedPrefs = LogActivity.this.getSharedPreferences(); 

作爲一個建議,我做了sharedPrefs和偏好編輯器本地onClick()方法,因爲你沒有在你的活動的其他部分使用它們

0

解決方案1:

代替

String nopname = "@string/nopname"; 

寫 -

String nopname = "Simon"; 

解決方案2:

在strings.xml檔案寫:

<string name="nopname">Simon</string> 

,並在活動類:

String nopname = getApplicationContext().getResources().getString(R.string.nopname); 
+0

是的,但在其他任何情況下在XML文件等它的工作原理與「@字符串/ nopname」例如按鈕......我想我的應用程序在其他語言翻譯因此我必須用字符串來完成。 爲什麼在這種情況下不能使用@string? 你能幫我解決我的主要問題嗎?共享的首選項? –