NullPointerException使用SharedPrefs中的名称创建SQLite

时间:2017-06-17 09:38:06

标签: android sqlite nullpointerexception sharedpreferences

我想做的事情:
我有第一个登录活动,用户使用Google帐户登录。然后我将用户数据保存到SheredPreferences:

private void handleSignInResult(GoogleSignInResult result) {
    if (result.isSuccess()) {
        GoogleSignInAccount acct = result.getSignInAccount();
        String userName = acct.getDisplayName();
        String userPhotoUrl = acct.getPhotoUrl().toString();

        String userEmail = acct.getEmail();

        UserPreference userPreference = new UserPreference(this);

        userPreference.setName(userName);
        userPreference.setEmail(userEmail);
        userPreference.setPhoto(userPhotoUrl);

        Intent mainIntent = new Intent(this, MainActivity.class);
        mainIntent.addFlags(
                Intent.FLAG_ACTIVITY_CLEAR_TOP).addFlags(
                Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
        startActivity(mainIntent);
        finish();
    }
}

我的偏好课程:

public class UserPreference {

SharedPreferences prefs;

public UserPreference(Activity activity) {
    prefs = activity.getSharedPreferences("USER_PREFERENCES",Activity.MODE_PRIVATE); // error line 15
}

void setEmail(String email) {
    prefs.edit().putString("userEmail", email).apply();
}

String getEmail() {
    return prefs.getString("userEmail", "userEmail");
}

...

我的DBHelper类(我尝试为每个用户创建单独的数据库):

public class DBTools extends SQLiteOpenHelper {

public DBTools(Context applicationContext, String name){

    super(applicationContext, name+"-database.db", null, 1);

}

...

但是当我尝试在我的MainActivity中使用它时:

DBTools mDBTools = new DBTools(this, new UserPreference(this).getEmail()); // error line 36 MainActivity

我收到此错误:

   Process: com.package, PID: 21667
 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.package/com.package.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference
 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2334)
 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2483)
 at android.app.ActivityThread.access$900(ActivityThread.java:153)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349)
 at android.os.Handler.dispatchMessage(Handler.java:102)
 at android.os.Looper.loop(Looper.java:148)
 at android.app.ActivityThread.main(ActivityThread.java:5441)
 at java.lang.reflect.Method.invoke(Native Method)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)
   Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference
 at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:181)
 at com.package.UserPreference.<init>(UserPreference.java:15)
 at com.package.MainActivity.<init>(MainActivity.java:36)
 at java.lang.Class.newInstance(Native Method)

我会提供任何帮助或提示

1 个答案:

答案 0 :(得分:0)

您的活动是空指针,请确保您发送了有效的上下文