java.lang.NullPointerException:错误 - 应用程序未打开

时间:2017-02-12 04:42:18

标签: java android eclipse android-intent

我无法解决此错误,因为我是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();
          }
      }
  }

}

1 个答案:

答案 0 :(得分:1)

检查主活动行61.抛出空指针异常,因为String.equals()函数对空对象进行操作。

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