2015-07-11 68 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? 你能帮我解决我的主要问题吗?共享的首选项? –