-1

我遇到了我的代码问题。当我点击标题“新配置文件”时,一个新的活动必须开始,但是当我点击时,会显示一个提示:“不幸的是,%AppName%已停止。”“。意图命令中的Android错误

这里是日志的Android监视器

--------- beginning of crash 
05-17 01:19:54.545 2568-2568/com.example.felipe.myappproject E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.example.felipe.myappproject, PID: 2568 
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.felipe.myappproject/com.example.felipe.myappproject.NewProfileActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2327) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
     at android.app.ActivityThread.-wrap11(ActivityThread.java) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:148) 
     at android.app.ActivityThread.main(ActivityThread.java:5417) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference 
     at android.content.ContextWrapper.getPackageName(ContextWrapper.java:133) 
     at android.content.ComponentName.<init>(ComponentName.java:128) 
     at android.content.Intent.<init>(Intent.java:4449) 
     at com.example.felipe.myappproject.NewProfileActivity.<init>(NewProfileActivity.java:14) 
     at java.lang.Class.newInstance(Native Method) 
     at android.app.Instrumentation.newActivity(Instrumentation.java:1067) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2317) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
     at android.app.ActivityThread.-wrap11(ActivityThread.java)  
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
     at android.os.Handler.dispatchMessage(Handler.java:102)  
     at android.os.Looper.loop(Looper.java:148)  
     at android.app.ActivityThread.main(ActivityThread.java:5417)  
     at java.lang.reflect.Method.invoke(Native Method)  
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  

在这里,我NewProfileActivity.java

public class NewProfileActivity extends AppCompatActivity { 

     EditText profile, password, confirmpass; 
     Intent insert = new Intent(NewProfileActivity.this, MainActivity.class); 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_new_profile); 
     } 

     public void backMain(View v){ 

      startActivity(back); 

     } 

     public void insertData(View v) { 

      profile = (EditText) findViewById(R.id.profileName); 
      password = (EditText) findViewById(R.id.password); 
      confirmpass = (EditText) findViewById(R.id.confirmPassword); 

      insert.putExtra("profile", profile.getText().toString()); 
      insert.putExtra("password", password.getText().toString()); 
      insert.putExtra("profile", confirmpass.getText().toString()); 

      compare(password.getText().toString(), confirmpass.getText().toString()); 
     } 

     public void compare(String x, String y){ 

      final AlertDialog alert = new AlertDialog.Builder(NewProfileActivity.this).create(); 

      if(x.equals(y)){ 
       alert.setTitle("New Profile!"); 
       alert.setMessage("Profile "+profile+" registered"); 
       alert.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int which) { 
           dialog.dismiss(); 
          } 
         } 
       ); 
       startActivity(insert); 
      } else { 
       alert.setTitle("Ops..."); 
       alert.setMessage("Passwords don't macth"); 
       alert.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int which) { 
           dialog.dismiss(); 
          } 
         } 
       ); 
      } 
     } 
    } 

我无法找到我在做什么错。我试图通过删除除了“public void backMain(View v)”之外的所有东西来简化代码,但我仍然遇到同样的问题。

+1

你不能在那里实例化'意图'。只需在你的方法需要它们之前创建它们。 –

+0

该代码与@MikeM一起使用。的解决方案。非常感谢,我没有意识到意图超出了我的方法。 – felipe218

回答

0

根据@ MikeM的评论,您正在初始化您的Intent,即使您作为参数传递的类尚未完全初始化。

你应该只是简单地初始化的权利,你会使用它像这样前:

public class NewProfileActivity extends AppCompatActivity { 

    EditText profile, password, confirmpass; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_new_profile); 
    } 

    public void backMain(View v) { 
     // startActivity(back); 
    } 

    public void insertData(View v) { 

     profile = (EditText) findViewById(R.id.profileName); 
     password = (EditText) findViewById(R.id.password); 
     confirmpass = (EditText) findViewById(R.id.confirmPassword); 

     compare(password.getText().toString(), confirmpass.getText().toString()); 
    } 

    public void compare(String x, String y) { 

     final AlertDialog alert = new AlertDialog.Builder(NewProfileActivity.this).create(); 

     if (x.equals(y)) { 
      alert.setTitle("New Profile!"); 
      alert.setMessage("Profile " + profile + " registered"); 
      alert.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) { 
          dialog.dismiss(); 
         } 
        } 
      ); 
      // CODES Transferred here ==== 
      Intent insert = new Intent(NewProfileActivity.this, MainActivity.class); 

      insert.putExtra("profile", profile.getText().toString()); 
      insert.putExtra("password", password.getText().toString()); 
      insert.putExtra("profile", confirmpass.getText().toString()); 
      // CODES Transferred here ==== 
      startActivity(insert); 
     } else { 
      alert.setTitle("Ops..."); 
      alert.setMessage("Passwords don't macth"); 
      alert.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) { 
          dialog.dismiss(); 
         } 
        } 
      ); 
     } 
    } 
} 

干杯! :D