【问题标题】:java.lang.NullPointerException: error - app is not opening [duplicate]java.lang.NullPointerException:错误 - 应用程序未打开 [重复]
【发布时间】:2017-06-30 06:30:46
【问题描述】:

由于我是 Android 新手,因此无法解决此错误。 我收到这个空指针异常错误,我的应用程序没有打开。

错误:

02/11 22:34:19:启动应用程序冷交换更改。 $ adb shell 上午 开始 -n “com.ahsanburney.quicknotes/com.ahsanburney.quicknotes.MainActivity” -a android.intent.action.MAIN -c android.intent.category.LAUNCHER 连接到设备 Nexus_4_API_21 [emulator-5554] 上的进程 3071 I/InstantRun:Instant Run Runtime 已启动。安卓包是 com.ahsanburney.quicknotes,真正的应用程序类为空。疣: 找不到 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:尝试调用虚拟方法 空对象上的“布尔 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) 在 java.lang.reflect.Method.invoke(本机方法) 在 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) 在 java.lang.reflect.Method.invoke(本机方法) 在 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();
          }
      }
  }

}

【问题讨论】:

  • at com.ahsanburney.quicknotes.MainActivity.onResume(MainActivity.java:61) 这表示错误发生在 MainActivity.java 的第 61 行。从那里开始。
  • 附注您应该安装 Android Studio,因为 Google 不再支持 Eclipse。

标签: java android eclipse android-intent


【解决方案1】:

检查主活动第 61 行。由于 String.equals() 函数对空对象进行操作,因此引发空指针异常。

在应用String.equals() 函数之前,请确保从data_saved.getdateTime() 和data_saved.getnotes() 返回的对象不为空。

【讨论】:

    猜你喜欢
    • 2016-08-16
    • 2014-01-19
    • 2016-11-10
    • 2014-10-06
    • 1970-01-01
    • 2023-01-28
    • 2022-06-24
    • 1970-01-01
    • 2018-03-16
    相关资源
    最近更新 更多