繁体   English   中英

当我在 Activity 中调用构造函数时应用程序崩溃

[英]App crashes when I call a constructor in an Activity

我是 android 工作室的新手,我正在尝试构建一个记事本应用程序。

 button.setOnClickListener(new View.OnClickListener() 
 {
   @Override
     public void onClick(View v) {
     String title = findViewById(R.id.textView3).toString();
     String note_content = findViewById(R.id.textView).toString();

     FileOutputStream outputStream;

     try 
       {
           outputStream = openFileOutput(title, Context.MODE_PRIVATE);
           outputStream.write(note_content.getBytes());
       } 
      catch (FileNotFoundException e) 
       {
           e.printStackTrace();
       } 
      catch (IOException e) 
       {
           e.printStackTrace();
       }
          MainActivity mainActivity = new MainActivity(title);
    }
    });

这是用户单击以保存注释的按钮。 代码保存注释后,它应该将标题发送到 MainActivity,以便可以将其发送到 Recycleview Adapter - 这会将其作为文本显示在 viewholder 中。

目前,当我运行代码时,它会崩溃 - 但是,当我删除构造函数时,应用程序可以正常工作。 ( MainActivity mainActivity = new MainActivity(title);)

Error:
     10-02 02:39:13.822 27279-27279/? D/AndroidRuntime: Shutting down VM
10-02 02:39:13.824 27279-27279/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.quicknote, PID: 27279
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.quicknote/com.example.quicknote.MainActivity}: java.lang.InstantiationException: java.lang.Class<com.example.quicknote.MainActivity> has no zero argument constructor
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2337)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490)
        at android.app.ActivityThread.-wrap11(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5443)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
     Caused by: java.lang.InstantiationException: java.lang.Class<com.example.quicknote.MainActivity> has no zero argument constructor
        at java.lang.Class.newInstance(Native Method)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1090)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2327)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490) 
        at android.app.ActivityThread.-wrap11(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:5443) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
10-02 02:39:20.081 27279-27279/com.example.quicknote I/Process: Sending signal. PID: 27279 SIG: 9

根据错误消息:

java.lang.InstantiationException: java.lang.Class 没有零参数构造函数

Android 系统需要一个零参数构造函数来实例化一个 Activity。 您永远不应该自己手动调用 Activity 构造函数,因为只有系统才能正确创建 Activity。

Parcelables 和 Bundles 文档详细说明了使用 extras Bundle将信息发送到 Activity 的正确方法。

无法实例化活动。 因为你不能开始这样的活动。 您必须使用意图来开始活动。 要发送“标题”,请额外使用意图。

Intent intent=new Intent(CurrentActivity.this, NewActivty.this);
intent.putExtra("title", title);
startActivty(intent);

您的 Activity 在您的 AndroidManifest.xml 中吗?

如果是,您必须从 MainActivity 的 onCreate() 中的附加项中检索标题,而不是从构造函数中检索。

像这样的东西:

     //that code instead of your MainActivity mainActivity = new MainActivity(title); line
    Intent intent = new Intent(YourActualActivity.this, MainActivity.class);
    intent.putExtra("title", title);
    startActivity(intent);


    //That code in the onCreate method of your MainActivity
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        String title = extras.getString("title");

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM