[英]Android Studio: Issue with OnResume and SharedPreferences: Fatal Error at Runtime
全部,只是想对每个人说实话,我不知道我在做什么,哈哈。 但是我在这个项目中实现 SharedPreferences onPause\onResume 时遇到问题,我想知道是否有人可以告诉我哪里出错了。
错误详情:
`E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.androidlabs, PID: 2260
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.androidlabs/com.example.androidlabs.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3365)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
at android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:173)
at android.view.ContextThemeWrapper.getTheme(ContextThemeWrapper.java:174)
at android.content.Context.obtainStyledAttributes(Context.java:744)
at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:848)
at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:815)
at androidx.appcompat.app.AppCompatDelegateImpl.findViewById(AppCompatDelegateImpl.java:640)
at androidx.appcompat.app.AppCompatActivity.findViewById(AppCompatActivity.java:259)
at com.example.androidlabs.MainActivity.<init>(MainActivity.java:19)
at java.lang.Class.newInstance(Native Method)
at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95)
at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:45)
at android.app.Instrumentation.newActivity(Instrumentation.java:1253)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3353)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) `
这是我的主要活动代码。 我可以看出问题出在 onResume(我认为!)但不知道为什么!
`package com.example.androidlabs;
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.TextView;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
//initializing variables
Button next = (Button) findViewById(R.id.next);
EditText name = (EditText) findViewById(R.id.name); //initializing variables
public static final String SHARED_PREF = "sharedprefs";
public static final String TEXT = "text";
private String text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SharedPreferences sh = getSharedPreferences(SHARED_PREF, MODE_PRIVATE);
SharedPreferences.Editor editor = sh.edit();
editor.putString("name", name.getText().toString());
editor.apply();
openNameActivity();
}
});
}
@Override
protected void onResume() {
super.onResume();
SharedPreferences sh = getSharedPreferences(SHARED_PREF, MODE_PRIVATE);
String savedName = sh.getString("name",null);
if (savedName != null){
name.setText(savedName);
}
}
@Override
protected void onPause() {
super.onPause();
SharedPreferences sh = getSharedPreferences(SHARED_PREF, MODE_PRIVATE);
//save the users name in My Shared Pref
SharedPreferences.Editor editor = sh.edit();
editor.putString("name", name.getText().toString());
editor.apply();
}
public void openNameActivity(){
EditText name = (EditText) findViewById(R.id.name);
String nameText = name.getText().toString();
Intent intent = new Intent(MainActivity.this, NameActivity.class);
intent.putExtra("name", nameText);
startActivityForResult(intent, 1);
};
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if(resultCode == RESULT_OK){
int result = data.getIntExtra("namePref", 0);
if(result == 0){
Toast.makeText(MainActivity.this,"Choose a new name", Toast.LENGTH_LONG).show();
}else{
finishAndRemoveTask();
}
}
if(resultCode == RESULT_CANCELED){
Toast.makeText(MainActivity.this,"Something went wrong", Toast.LENGTH_LONG).show();
}
}
}
}`
打开您的应用程序时,您的应用程序崩溃了吗? 看起来你正在错误的地方初始化你的按钮和 editText
你能把下面提到的代码移到onCreate
方法并将它放在setContentView
方法的下面吗
next = (Button) findViewById(R.id.next);
name = (EditText) findViewById(R.id.name);
而且你还需要声明下一个并命名两个变量
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.