2011-03-09 58 views
1

我有以下情况,这是相当拉我的头发:我正在写一个类来管理Android相机,它扩展了活动。在那个类里面我有下面的代码。什么情况是,我总是得到零点异常--with其强制关闭小friend--在这行:Android:startActivityForResult始终为空并强制关闭我的应用程序

startActivityForResult(intent, 0); 

但是我得到的System.out.println(“故意不为空”);印在logcat中确定...

的logcat的说:

03-08 22:46:38.584: ERROR/AndroidRuntime(1079): java.lang.NullPointerException 
03-08 22:46:38.584: ERROR/AndroidRuntime(1079):  at android.app.Activity.startActivityForResult(Activity.java:2749) 
03-08 22:46:38.584: ERROR/AndroidRuntime(1079):  at com.test.cameratest.startCameraActivity(cameratest.java:39) 

在清单中,我有:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera"/> 
<activity android:name=".cameratest" /> 

所以,我在做什么错?为什么startActivityForResult总是抛出null!?

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
} 

/** As per suggestion tried to change the method from protected to private or public 
but still have the same problem */ 
protected void startCameraActivity() 
{ 
    String path = (new StringBuilder()).append(Environment.getExternalStorageDirectory()).append("/images/test.jpg").toString(); 

    System.out.println("started"); 

    File file = new File(path); 

    System.out.println(path); 

    Uri outputFileUri = Uri.fromFile(file); 

    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 

    intent.putExtra("output", outputFileUri); 
    /** Removed as per suggestion 
    if (intent!=null) 
    { 
     System.out.println("intent not null"); 
      **startActivityForResult(intent, 0);** 
    } 
    */  

    **startActivityForResult(intent, 0);** <== null pointer exception 
} 

编辑:

按照建议,我接过来一看从Android 2.1r2框架上Activity.java线2749和这里是代码:

public void startActivityForResult(Intent intent, int requestCode) { 
     if (mParent == null) { 

       **** Line 2749 is the folowing     
       Instrumentation.ActivityResult ar = 
       mInstrumentation.execStartActivity(
        this, mMainThread.getApplicationThread(), mToken, this, 
        intent, requestCode); 
       **** 

      if (ar != null) { 
       mMainThread.sendActivityResult(
        mToken, mEmbeddedID, requestCode, ar.getResultCode(), 
        ar.getResultData()); 
      } 
      if (requestCode >= 0) { 
       // If this start is requesting a result, we can avoid making 
       // the activity visible until the result is received. Setting 
       // this code during onCreate(Bundle savedInstanceState) or onResume() will keep the 
       // activity hidden during this time, to avoid flickering. 
       // This can only be done when a result is requested because 
       // that guarantees we will get information back when the 
       // activity is finished, no matter what happens to it. 
       mStartedActivity = true; 
      } 
     } else { 
      mParent.startActivityFromChild(this, intent, requestCode); 
     } 
    } 

线2749标有双**但是,我没有看到该代码的问题

EDITED

忘了解释我是如何把这种:

cameratest cam = new cameratest(); 
cam.startCameraActivity(); 
+0

既然你已经过了'intent.putExtra(...)',那么检查'intent!= null'是没用的。这不是问题。我会看看你正在使用的操作系统版本的Activity.java 2749行。这可能会提供一个提示。你可以在这里找到框架源码(http://android.git.kernel.org/?p=platform/frameworks/base.git;a=summary) –

+0

谢谢泰德,但是我没有看到问题没有,或者据我所知。我还发现,无论我想开始什么活动,它总是会抛出一个空的异常错误。我试着用snippets来获取联系人并拨打一个号码... –

+0

我认为问题可能是由于受保护的方法所致。请尝试使用私人的方式 –

回答

0

尝试Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

我不认为这些常量字符串的引用时,他们的价值必然相等。

+0

谢谢马修,我尝试过这一行,但仍然没有任何...我遇到了同样的问题。 –