我想做的事情:
我有第一个登录活动,用户使用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)
我会提供任何帮助或提示
答案 0 :(得分:0)
您的活动是空指针,请确保您发送了有效的上下文