我有一项具有以下内部活动的活动
public class Closer extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
doMyWork();
}
public void gotoCat() {
Intent intent = new Intent(this, CatActivity.class);
startActivityForResult(intent, 1);
}
}
但是当我运行代码时,我得到了一个以startActivityForResult(intent, 1)
为根的NPE。我怎么能成功地做到这一点?
封闭活动的来电是new Closer.gotoCat()
错误:
java.lang.NullPointerException
at android.app.Activity.startActivityForResult(Activity.java:3430)
at android.app.Activity.startActivityForResult(Activity.java:3391)
at com.company.Game.widget.MyView$Closer.gotoCat(MyView.java:496)
at com.company.Game.widget.MyView.onDragEndSoCallCat(MyView.java:315)
at com.company.Game.widget.MyView.onTouch(MyView.java:254)
at android.view.View.dispatchTouchEvent(View.java:7456)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2264)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1995)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2270)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2010)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2270)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2010)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2270)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2010)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2270)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2010)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2270)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2010)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2270)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2010)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2270)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2010)
答案 0 :(得分:1)
您可以像这样调用gotoCat()方法: - 1.在Closer Activity类中记下以下代码
public class Closer extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gotoCat();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if(resultCode == RESULT_OK){
String result=data.getStringExtra("result");
doMyWork(result);
}
if (resultCode == RESULT_CANCELED) {
//Write your code if there's no result
}
}
}
public void gotoCat() {
Intent intent = new Intent(this, CatActivity.class);
startActivityForResult(intent, 1);
}
public void doMyWork(String result) {
// TODO Auto-generated method stub
Log.d("hello", "Saurabh"+result);
Toast.makeText(getBaseContext(), result, Toast.LENGTH_SHORT).show();
}
}
然后在第二个Activity中输入以下代码: -
public class CatActivity extends Activity{
public String result = "Coming Back from Second Activity";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Intent returnIntent = new Intent(getBaseContext(), MainActivity.class);
returnIntent.putExtra("result",result);
setResult(RESULT_OK,returnIntent);
finish();
}
}
工作正常。希望它会对你有所帮助。