我无法解决此错误,因为我是Android新手。 我得到了这个空指针异常错误,我的应用程序没有打开。
错误:
02/11 22:34:19:启动应用程序冷交换更改。 $ adb shell am 开始-n “com.ahsanburney.quicknotes / com.ahsanburney.quicknotes.MainActivity” -a android.intent.action.MAIN -c android.intent.category.LAUNCHER连接到设备Nexus_4_API_21上的进程3071 [emulator-5554] I / InstantRun:即时运行运行时启动。 Android包是 com.ahsanburney.quicknotes,真正的应用程序类为null。疣: 无法找到DexFile的OatDexFile /data/data/com.ahsanburney.quicknotes/files/instant-run/dex/slice-slice_1-classes.dex (规范路径 /data/data/com.ahsanburney.quicknotes/files/instant-run/dex/slice-slice_1-classes.dex) 在OatFile中使用校验和0x428a55bf /data/data/com.ahsanburney.quicknotes/cache/slice-slice_1-classes.dex W / art:在Android 4.1之前,方法 android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList,android.graphics.PorterDuff $ Mode) 会错误地覆盖package-private方法 android.graphics.drawable.Drawable D / MainActivity:loadFile:正在加载 JSON文件D / AndroidRuntime:关闭VM E / AndroidRuntime:致命 例外:主要 过程:com.ahsanburney.quicknotes,PID:3071 java.lang.RuntimeException:无法恢复活动 {com.ahsanburney.quicknotes / com.ahsanburney.quicknotes.MainActivity}: java.lang.NullPointerException:尝试调用虚方法 空对象上的'boolean java.lang.String.equals(java.lang.Object)' 参考 在android.app.ActivityThread.performResumeActivity(ActivityThread.java:2951) 在android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2982) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2365) 在android.app.ActivityThread.access $ 800(ActivityThread.java:144) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1278) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:135) 在android.app.ActivityThread.main(ActivityThread.java:5221) at java.lang.reflect.Method.invoke(Native Method) 在java.lang.reflect.Method.invoke(Method.java:372) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 引发者:java.lang.NullPointerException:尝试调用虚方法'boolean 空对象引用上的java.lang.String.equals(java.lang.Object)' 在com.ahsanburney.quicknotes.MainActivity.onResume(MainActivity.java:61) 在android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1241) 在android.app.Activity.performResume(Activity.java:6023) 在android.app.ActivityThread.performResumeActivity(ActivityThread.java:2940) 在android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2982) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2365) 在android.app.ActivityThread.access $ 800(ActivityThread.java:144) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1278) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:135) 在android.app.ActivityThread.main(ActivityThread.java:5221) at java.lang.reflect.Method.invoke(Native Method) 在java.lang.reflect.Method.invoke(Method.java:372) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 申请已终止。
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private TextView dateTime;
private EditText notes;
private Data_Saved data_saved;
private String nChange;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
SimpleDateFormat df = new SimpleDateFormat("EEE MMM d, h:mm a");
String date = df.format(Calendar.getInstance().getTime());
dateTime = (TextView) findViewById(R.id.lastupdated);
dateTime.setText(date);
notes = (EditText) findViewById(R.id.main_notes);
notes.setMovementMethod(new ScrollingMovementMethod());
}
@Override
protected void onResume() {
super.onStart();
data_saved = loadFile(); // Load the JSON containing the product data - if it exists
if (data_saved != null) { // null means no file was loaded
if(data_saved.getdateTime().equals(""))
{
DateFormat df = new SimpleDateFormat("EEE MMM d, h:mm a");
String date = df.format(Calendar.getInstance().getTime());
dateTime.setText(date);
}
else{
dateTime.setText(data_saved.getdateTime());}
if(data_saved.getnotes().equals(""))
{
DateFormat df = new SimpleDateFormat("EEE MMM d, h:mm a");
String date = df.format(Calendar.getInstance().getTime());
dateTime.setText(date);
}
notes.setText(data_saved.getnotes());
nChange = data_saved.getnotes();
}
}
private Data_Saved loadFile() {
Log.d(TAG, "loadFile: Loading JSON File");
data_saved = new Data_Saved();
try {
InputStream is = getApplicationContext().openFileInput("data_saved.json");
JsonReader reader = new JsonReader(new InputStreamReader(is,"UTF-8"));
reader.beginObject();
while (reader.hasNext()) {
String name = reader.nextName();
if (name.equals("dateTime")) {
data_saved.setdateTime(reader.nextString());
} else if (name.equals("notes")) {
data_saved.setnotes(reader.nextString());
} else {
reader.skipValue();
}
}
reader.endObject();
} catch (FileNotFoundException e) {
Toast.makeText(this, "No file is Present", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
return data_saved;
}
@Override
protected void onPause() {
super.onPause();
data_saved.setdateTime(dateTime.getText().toString());
data_saved.setnotes(notes.getText().toString());
saveNotes();
}
private void saveNotes() {
if (nChange.equals(data_saved.getnotes())) {
return;
} else {
Log.d(TAG, "saveNotes: Saving JSON File");
try {
FileOutputStream fos = getApplicationContext().openFileOutput("data_saved.json", Context.MODE_PRIVATE);
JsonWriter writer = new JsonWriter(new OutputStreamWriter(fos, "UTF-8"));
writer.setIndent(" ");
writer.beginObject();
DateFormat df = new SimpleDateFormat("EEE MMM d, h:mm a");
String date = df.format(Calendar.getInstance().getTime());
writer.name("dateTime").value(date);
writer.name("notes").value(data_saved.getnotes());
writer.endObject();
writer.close();
/// You do not need to do the below - it's just
/// a way to see the JSON that is created.
///
StringWriter sw = new StringWriter();
writer = new JsonWriter(sw);
writer.setIndent(" ");
writer.beginObject();
//DateFormat df = new SimpleDateFormat("EEE MMM d, h:mm a");
//String date = df.format(Calendar.getInstance().getTime());
//dateTime.setText(date);
//writer.name(date);
//xmlSerializer.text(date);
writer.name("dateTime").value(data_saved.getdateTime());
writer.name("notes").value(data_saved.getnotes());
writer.endObject();
writer.close();
Log.d(TAG, "saveNotes: JSON:\n" + sw.toString());
///
///
Toast.makeText(this, "Notes Saved!", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.getStackTrace();
}
}
}
}
答案 0 :(得分:1)
检查主活动行61.抛出空指针异常,因为String.equals()
函数对空对象进行操作。
在应用data_saved.getdateTime()
函数之前,请确保从data_saved.getnotes()
和String.equals()
返回的对象不为空。