2013-05-29 71 views
1

我使用本教程:產生的原因:java.lang.reflect.InvocationTargetException

http://www.vogella.com/articles/AndroidCamera/article.html

捕獲的圖像,並將其保存在SD卡,但每當我運行這個程序,得到: 不幸的是應用程序已經停止

錯誤說:

所致:java.lang.reflect.InvocationTargetException

行號39是:

camera.takePicture(NULL,NULL, 新PhotoHandler(getApplicationContext()));

logcat的輸出:

05-29 16:19:38.351: E/AndroidRuntime(767): FATAL EXCEPTION: main 
05-29 16:19:38.351: E/AndroidRuntime(767): java.lang.IllegalStateException: Could not execute method of the activity 
05-29 16:19:38.351: E/AndroidRuntime(767): at android.view.View$1.onClick(View.java:3599) 
05-29 16:19:38.351: E/AndroidRuntime(767): at android.view.View.performClick(View.java:4204) 
05-29 16:19:38.351: E/AndroidRuntime(767): at android.view.View$PerformClick.run(View.java:17355) 
05-29 16:19:38.351: E/AndroidRuntime(767): at android.os.Handler.handleCallback(Handler.java:725) 
05-29 16:19:38.351: E/AndroidRuntime(767): at android.os.Handler.dispatchMessage(Handler.java:92) 
05-29 16:19:38.351: E/AndroidRuntime(767): at android.os.Looper.loop(Looper.java:137) 
05-29 16:19:38.351: E/AndroidRuntime(767): at android.app.ActivityThread.main(ActivityThread.java:5041) 
05-29 16:19:38.351: E/AndroidRuntime(767): at java.lang.reflect.Method.invokeNative(Native Method) 
05-29 16:19:38.351: E/AndroidRuntime(767): at java.lang.reflect.Method.invoke(Method.java:511) 
05-29 16:19:38.351: E/AndroidRuntime(767): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
05-29 16:19:38.351: E/AndroidRuntime(767): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
05-29 16:19:38.351: E/AndroidRuntime(767): at dalvik.system.NativeStart.main(Native Method) 
05-29 16:19:38.351: E/AndroidRuntime(767): Caused by: java.lang.reflect.InvocationTargetException 
05-29 16:19:38.351: E/AndroidRuntime(767): at java.lang.reflect.Method.invokeNative(Native Method) 
05-29 16:19:38.351: E/AndroidRuntime(767): at java.lang.reflect.Method.invoke(Method.java:511) 
05-29 16:19:38.351: E/AndroidRuntime(767): at android.view.View$1.onClick(View.java:3594) 
05-29 16:19:38.351: E/AndroidRuntime(767): ... 11 more 
05-29 16:19:38.351: E/AndroidRuntime(767): Caused by: java.lang.NullPointerException 
05-29 16:19:38.351: E/AndroidRuntime(767): at com.example.cameraapp.MakePhotoActivity.onClick(MakePhotoActivity.java:39) 
05-29 16:19:38.351: E/AndroidRuntime(767): ... 14 more 

MakePhotoActivity.java:

public class MakePhotoActivity extends Activity { 
    final static String DEBUG_TAG = "MakePhotoActivity"; 
    private Camera camera; 
    private int cameraId = 0; 

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

    // do we have a camera? 
    if (!getPackageManager() 
     .hasSystemFeature(PackageManager.FEATURE_CAMERA)) { 
     Toast.makeText(this, "No camera on this device", Toast.LENGTH_LONG) 
      .show(); 
    } else { 
     cameraId = findFrontFacingCamera(); 
     if (cameraId < 0) { 
     Toast.makeText(this, "No front facing camera found.", 
      Toast.LENGTH_LONG).show(); 
     } else { 
     camera = Camera.open(cameraId); 
     } 
    } 
    } 

    public void onClick(View view) { 
    camera.takePicture(null, null, 
     new PhotoHandler(getApplicationContext())); 
    } 

    private int findFrontFacingCamera() { 
    int cameraId = -1; 
    // Search for the front facing camera 
    int numberOfCameras = Camera.getNumberOfCameras(); 
    for (int i = 0; i < numberOfCameras; i++) { 
     CameraInfo info = new CameraInfo(); 
     Camera.getCameraInfo(i, info); 
     if (info.facing == CameraInfo.CAMERA_FACING_FRONT) { 
     Log.d(DEBUG_TAG, "Camera found"); 
     cameraId = i; 
     break; 
     } 
    } 
    return cameraId; 
    } 

    @Override 
    protected void onPause() { 
    if (camera != null) { 
     camera.release(); 
     camera = null; 
    } 
    super.onPause(); 
    } 
+0

顯示logcat的輸出。 。 – SilentKiller

+0

@SilentKiller你好,編輯 –

+0

發表您的MakePhotoActivity –

回答

7

要開放的Android默認的相機,你寫一個簡單的兩行代碼分別是:

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

,並得到你需要重寫onActivityResult()點擊的圖片的路徑。下面的代碼可以幫助你得到的點擊圖像的路徑:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == Activity.RESULT_OK && requestCode == 0) { 
    String result = data.toURI(); 
    // ... 
    } 
} 

最後,在你的清單文件,添加一個「使用許可權」的相機。

<uses-permission android:name="android.permission.CAMERA" /> 

:更新答案:

對於自定義CAMRA

按照此鏈接,自定義相機:

  1. Custom Camera Application
  2. Custom camera for Android created for testing, playing and learning
  3. How to capture and save an image using custom camera in Android?
  4. How to create a custom layout for your camera in Android?
+0

2)自定義相機爲Android進行測試創建,娛樂和學習這個例子可以幫助我解決這個問題。我參考CameraPreview類的surfaceChanged方法 – Vikram

0

我覺得你的問題是在這裏:

Caused by: java.lang.NullPointerException 
05-29 16:19:38.351: E/AndroidRuntime(767): at com.example.cameraapp.MakePhotoActivity.onClick(MakePhotoActivity.java:39) 
05-29 16:19:38.351: E/AndroidRuntime(767): ... 14 more 

檢查什麼是錯的@ MakePhotoActivity。 java,li NE 39.

+2

希望我能在其他人的問題發表評論。我沒有足夠的代表。 –

2

您已經通過調用反射的方法添加額外的抽象水平。反射圖層包含InvocationTargetException中的任何異常,它允許您分辨由反射調用中的失敗(例如,您的參數列表無效)導致的異常與調用的方法內的失敗之間的差異。

只需打開InvocationTargetException內的原因,就可以達到原來的原因。

-3

:你需要在你的AVD相機,使編輯AVD和背部以及對前面添加攝像頭.....

相關問題