从内部活动调用startActivityForResult

时间:2013-10-16 06:23:01

标签: android android-activity

我有一项具有以下内部活动的活动

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)

1 个答案:

答案 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();  
    }
}

工作正常。希望它会对你有所帮助。