应用程序崩溃按钮按下“尝试调用虚拟方法”

时间:2015-03-21 10:59:26

标签: java android android-intent

我有一个Android应用程序应该按下按钮打开一个活动,但当我点击它时,应用程序崩溃说“尝试调用虚拟方法”。这是我的代码。

MainClass.java

public class MainActivity extends ActionBarActivity {
Button Notify;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Notify = (Button)findViewById(R.id.notify);

        Notify.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            Intent intent = new Intent(MainActivity.this, DisplayPush.class);
                startActivity(intent);


        }
    });
    }

我的另一个活动课

DisplayPush.java

public class DisplayPush extends Activity {

@Override
public void onBackPressed(){
   Intent myIntent = new Intent(DisplayPush.this,MainActivity.class);
   startActivity(myIntent);
  //  overridePendingTransition(R.anim.from_middle, R.anim.to_middle);
    finish();
}

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

    TextView notification_title = (TextView) findViewById(R.id.title);
    TextView notification_message = (TextView) findViewById(R.id.message);

    ParseAnalytics.trackAppOpened(getIntent());

    Intent intent = getIntent();
    Bundle extras = intent.getExtras();
    String jsonData = extras.getString("com.parse.Data");

    try{
        JSONObject notification = new JSONObject(jsonData);
       // String title = notification.getString("push_hash");
        String message = notification.getString("alert");

      //  notification_title.setText(title);
        notification_message.setText(message);
    }
    catch(JSONException e){
        Toast.makeText(getApplicationContext(), "Something went wrong with the notification", Toast.LENGTH_SHORT).show();
    }

}

我已经在我的清单中定义了活动。 这是logcat。

03-21 06:51:35.157: E/AndroidRuntime(3042): FATAL EXCEPTION: main
03-21 06:51:35.157: E/AndroidRuntime(3042): Process: hasan.parsereceiveandshow, PID: 3042
03-21 06:51:35.157: E/AndroidRuntime(3042): java.lang.RuntimeException: Unable to start activity ComponentInfo{hasan.parsereceiveandshow/hasan.parsereceiveandshow.DisplayPush}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference

2 个答案:

答案 0 :(得分:2)

与日志一样:

Bundle.getString(java.lang.String)' on a null object reference

因为extrasnull

不使用Intent发送包含com.parse.Data键的Bundle,用于在Button Click上启动DisplayPush Activity。

  

我应该在代码中编辑什么?

com.parse.Data按钮点击:

上发送含有Notify密钥的数据
Intent intent = new Intent(MainActivity.this, DisplayPush.class);
intent.putExtra("com.parse.Data","String text");
startActivity(intent);

在从Bundle获取值之前还要添加null检查:

if(extras !=null)
  if(extras.containsKey("com.parse.Data"))
    String jsonData = extras.getString("com.parse.Data");

并在评论中说明全局定义String jsonData;

答案 1 :(得分:1)

例外情况表示您尝试在空引用上调用getString方法。在DisplayPush中,您从intent获取Bundle个对象,该对象为null,因为您没有在onClick类中的MainActivity方法中添加任何意图。

相关问题