android - 调用 startActivityForResult() 时出现空指针异常

标签 android android-activity nullpointerexception start-activity

从另一个类中的类调用 startActivityForResult() 时出现问题(空指针异常),代码如下:

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)

最佳答案

您将 OCRActivity 视为一个普通的 Java 类,而不是另一个 Activity。因此,当您调用 startActivityForResult() 时,您会得到一个 NPE,因为 Activity 的 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() 这样的函数(以及任何其他实际上不需要在 Activity 本身中,并且可以通过接收数据作为参数并返回它来工作的函数)移动到一个单独的类(称其为 Utility 或其他)。

关于android - 调用 startActivityForResult() 时出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14306094/

相关文章:

java - 尝试从异步类 android 中的 url 解析 JSON 数据时出现空指针异常

android - GridView.setItemChecked(位置, 值)

Android 应用与 2.2 和 4.0 的兼容性

java - 在物理设备上测试时工具栏标题保持黑色

android - 来自 BroadcastReceiver 的调用通知

java - 什么是NullPointerException,我该如何解决?

android - 安装应用程序和卸载不会完全删除 - Android Studio

android - 从其 Activity 启动的服务是否在新线程中运行?

android - 视频播放完毕后启动 Activity

java - 由 : java. lang.NullPointerException 引起:尝试在空对象引用上调用接口(interface)方法