应用在按下按钮时崩溃,显示 "Attempt to invoke virtual method"
App crashes on Button Press stating "Attempt to invoke virtual method"
我有一个 android 应用程序,它应该在按下按钮时打开 activity,但是当我点击它时,应用程序崩溃并显示 "Attempt to invoke virtual method"。这是我的代码。
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);
}
});
}
我的另一个activityclass
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
如日志:
Bundle.getString(java.lang.String)' on a null object reference
因为extras
是null
.
不发送包含 com.parse.Data
键的捆绑包,其 Intent 用于在单击按钮时启动 DisplayPush
Activity。
What should i edit in code ?
在 Notify
按钮点击时使用 com.parse.Data
键发送数据:
Intent intent = new Intent(MainActivity.this, DisplayPush.class);
intent.putExtra("com.parse.Data","String text");
startActivity(intent);
并且在从 Bundle 获取值之前添加空值检查:
if(extras !=null)
if(extras.containsKey("com.parse.Data"))
String jsonData = extras.getString("com.parse.Data");
并按照评论中的说明全局定义 String jsonData;
。
异常表示您正在尝试对空引用调用 getString
方法。在 DisplayPush
中,您从 intent 中获取 Bundle
对象,该对象为空,因为您没有在 MainActivity
class 中的 onClick
方法中放入任何对象。
我有一个 android 应用程序,它应该在按下按钮时打开 activity,但是当我点击它时,应用程序崩溃并显示 "Attempt to invoke virtual method"。这是我的代码。
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);
}
});
}
我的另一个activityclass
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
如日志:
Bundle.getString(java.lang.String)' on a null object reference
因为extras
是null
.
不发送包含 com.parse.Data
键的捆绑包,其 Intent 用于在单击按钮时启动 DisplayPush
Activity。
What should i edit in code ?
在 Notify
按钮点击时使用 com.parse.Data
键发送数据:
Intent intent = new Intent(MainActivity.this, DisplayPush.class);
intent.putExtra("com.parse.Data","String text");
startActivity(intent);
并且在从 Bundle 获取值之前添加空值检查:
if(extras !=null)
if(extras.containsKey("com.parse.Data"))
String jsonData = extras.getString("com.parse.Data");
并按照评论中的说明全局定义 String jsonData;
。
异常表示您正在尝试对空引用调用 getString
方法。在 DisplayPush
中,您从 intent 中获取 Bundle
对象,该对象为空,因为您没有在 MainActivity
class 中的 onClick
方法中放入任何对象。