1

別のクラス内のクラスから startActivityForResult() を呼び出すときに問題 (Null Pointer Exception) が発生しました。コードは次のとおりです。

public class OCRActivity extends Activity {

public OCRActivity(String operator)
{
    this.operator = operator;
}


public void startCameraActivity() {

    final Intent capture_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(capture_intent, 1); // I get the Null pointer Exception here
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (resultCode == RESULT_OK) {

        if(requestCode == 1){
            //get the Uri for the captured image
            picUri = data.getData();
            //carry out the crop operation
            performCrop();
        }
}

そして、ここに私が電話する場所がありますstartCameraActivity()

public class WayToFillActivity extends Activity implements OnClickListener {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.way_to_fill);

    CAMERA_BTN = (Button) findViewById(R.id.camera_btn);
    CAMERA_BTN.setOnClickListener(this);
    Intent operator_intent =  getIntent();
    OPERATOR = operator_intent.getStringExtra("operator");
}

@Override
public void onClick(View v) {
    if (v.getId() == R.id.camera_btn)
    {
        OCRActivity ocr = new OCRActivity(OPERATOR);
        ocr.startCameraActivity();

    }

}

だから私が何か間違ったことをしているなら教えてください!!

ログキャット

01-13 16:22:26.583: E/AndroidRuntime(32425): java.lang.NullPointerException
01-13 16:22:26.583: E/AndroidRuntime(32425):    at     android.app.Activity.startActivityForResult(Activity.java:3190)
01-13 16:22:26.583: E/AndroidRuntime(32425):    at com.almannaa.EasyRecharge.OCRActivity.startCameraActivity(OCRActivity.java:176)
4

2 に答える 2

5

OCRActivity別のアクティビティではなく、通常の Java クラスとして扱っています。このため、呼び出すstartActivityForResult()とアクティビティが呼び出されていないため、NPE が返されますonCreate()。これは、現在のインスタンスが呼び出しに対して有効でないことを意味します。startActivityForResult()

代わりに、次を使用してみてください。

public class WayToFillActivity extends Activity implements OnClickListener {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.way_to_fill);

    CAMERA_BTN = (Button) findViewById(R.id.camera_btn);
    CAMERA_BTN.setOnClickListener(this);
    Intent operator_intent =  getIntent();
    OPERATOR = operator_intent.getStringExtra("operator");
}

@Override
public void onClick(View v) {
    if (v.getId() == R.id.camera_btn)
    {
        OCRActivity ocr = new OCRActivity(OPERATOR);
        ocr.startCameraActivity();

    }

}

public void startCameraActivity() {

    final Intent capture_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(capture_intent, 1); // I get the Null pointer Exception here
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (resultCode == RESULT_OK) {

        if(requestCode == 1){
            //get the Uri for the captured image
            picUri = data.getData();
            //carry out the crop operation
            performCrop();
        }
}
}

おそらく、次のような関数performCrop()(およびアクティビティ自体に実際に存在する必要がなく、データをパラメーターとして受け取って返すことで機能するその他の関数) を別のクラス (Utility などと呼びます) に移動する必要があります。

于 2013-01-13T17:27:50.513 に答える
0

おそらく、データが null でないかどうかを確認する必要があります。

@Override        
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 1 && data != null) {

        if(resultCode == RESULT_OK){
            //get the Uri for the captured image
            picUri = data.getData();
            //carry out the crop operation
            performCrop();
        } }
于 2013-01-13T17:31:46.840 に答える