android-保存照片时应用程序崩溃

乔兹·曾达(Joolz Zenda)

我一直在关注http://developer.android.com/guide/topics/media/camera.html中的摄像头指南

一切正常,直到我拍摄完照片并选择对勾以接受图像为止。然后我得到了可怕的“不幸的是,应用程序已停止工作”。我正在实际的nexus 5设备上进行测试。

我的代码是

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

}

/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}

/* Create a file Uri for saving an image or video */
private static Uri getOutputMediaFileUri(int type){
      return Uri.fromFile(getOutputMediaFile(type));
} 


private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
private Uri fileUri;
public static final int MEDIA_TYPE_IMAGE = 1;
public static final int MEDIA_TYPE_VIDEO = 2;

/* Create a File for saving an image or video */
private static File getOutputMediaFile(int type){

    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
              Environment.DIRECTORY_PICTURES), "SimpleCamera");

    // Create the storage directory if it does not exist
    if (! mediaStorageDir.exists()){
        if (! mediaStorageDir.mkdirs()){
            Log.d("SimpleCamera", "failed to create directory");
            return null;
        }
    }

    // Create a media file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    File mediaFile;
    if (type == MEDIA_TYPE_IMAGE){
        mediaFile = new File(mediaStorageDir.getPath() + File.separator +
        "IMG_"+ timeStamp + ".jpg");
    } else {
        return null;
    }

    return mediaFile;
}

public void openCamera(View view){
    // create Intent to take a picture and return control to the calling application
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image
    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name

    // start the image capture Intent
    startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            // Image captured and saved to fileUri specified in the Intent
            Toast.makeText(this, "Image saved to:\n" +
                     data.getData(), Toast.LENGTH_LONG).show();
        } else if (resultCode == RESULT_CANCELED) {
            // User cancelled the image capture
        } else {
            // Image capture failed, advise user
        }
    }
}

在我的清单中,我已经包括

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

我的Logcat

03-20 12:40:53.658: E/AndroidRuntime(21487): FATAL EXCEPTION: main
03-20 12:40:53.658: E/AndroidRuntime(21487): Process: com.juliette.simplecamera, PID: 21487
03-20 12:40:53.658: E/AndroidRuntime(21487): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=null} to activity {com.juliette.simplecamera/com.juliette.simplecamera.MainActivity}: java.lang.NullPointerException
03-20 12:40:53.658: E/AndroidRuntime(21487):    at android.app.ActivityThread.deliverResults(ActivityThread.java:3365)
03-20 12:40:53.658: E/AndroidRuntime(21487):    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3408)
03-20 12:40:53.658: E/AndroidRuntime(21487):    at android.app.ActivityThread.access$1300(ActivityThread.java:135)
03-20 12:40:53.658: E/AndroidRuntime(21487):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
03-20 12:40:53.658: E/AndroidRuntime(21487):    at android.os.Handler.dispatchMessage(Handler.java:102)
03-20 12:40:53.658: E/AndroidRuntime(21487):    at android.os.Looper.loop(Looper.java:136)
03-20 12:40:53.658: E/AndroidRuntime(21487):    at android.app.ActivityThread.main(ActivityThread.java:5017)
03-20 12:40:53.658: E/AndroidRuntime(21487):    at java.lang.reflect.Method.invokeNative(Native Method)
03-20 12:40:53.658: E/AndroidRuntime(21487):    at java.lang.reflect.Method.invoke(Method.java:515)
03-20 12:40:53.658: E/AndroidRuntime(21487):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
03-20 12:40:53.658: E/AndroidRuntime(21487):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
03-20 12:40:53.658: E/AndroidRuntime(21487):    at dalvik.system.NativeStart.main(Native Method)
03-20 12:40:53.658: E/AndroidRuntime(21487): Caused by: java.lang.NullPointerException
03-20 12:40:53.658: E/AndroidRuntime(21487):    at com.juliette.simplecamera.MainActivity.onActivityResult(MainActivity.java:94)
03-20 12:40:53.658: E/AndroidRuntime(21487):    at android.app.Activity.dispatchActivityResult(Activity.java:5423)
03-20 12:40:53.658: E/AndroidRuntime(21487):    at android.app.ActivityThread.deliverResults(ActivityThread.java:3361)

还有我的布局,以防万一

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.juliette.simplecamera.MainActivity" >

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="58dp"
    android:text="@string/camera" 
    android:onClick="openCamera"/>

</RelativeLayout>

我知道问题与返回结果的原始活动有关,但我不知道如何解决。任何建议将不胜感激,我对此很陌生,我假设我犯了一个简单的菜鸟错误。

提前致谢!

格里舒

从下面的日志中可以清楚地表明您Intent datanull

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=null}

检查Intent数据的空值

尝试如下:

if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
    if (resultCode == RESULT_OK && null != data) {

        // Image captured and saved to fileUri specified in the Intent
        Toast.makeText(this, "Image saved to:\n" +
                 data.getData(), Toast.LENGTH_LONG).show();
    } 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在新设备上选择照片时,Android应用程序崩溃

来自分类Dev

使用回形针保存照片时,Rails应用程序“无法分配内存”

来自分类Dev

使用回形针保存照片时,Rails应用程序“无法分配内存”

来自分类Dev

从View Android保存照片拼贴

来自分类Dev

从View Android保存照片拼贴

来自分类Dev

使用相机后尝试编辑图片时,Android new Photos应用程序崩溃

来自分类Dev

创建用于保存照片和视频的应用程序

来自分类Dev

Android Studio模拟器相机无法保存照片

来自分类Dev

保存照片后出现黑屏-Android相机

来自分类Dev

Android应用程序在简单应用程序中崩溃

来自分类Dev

Proguard后Android应用程序崩溃

来自分类Dev

android Facebook SDK崩溃的应用程序?

来自分类Dev

Android应用程序在setText上崩溃

来自分类Dev

Android Map应用程序崩溃

来自分类Dev

暂停时Android应用程序崩溃

来自分类Dev

android应用程序在getString()行崩溃

来自分类Dev

Android WebView loadURL崩溃的应用程序?

来自分类Dev

Android应用程序不断与Tabhost崩溃

来自分类Dev

Android L:LinkageError使应用程序崩溃

来自分类Dev

Android按钮单击崩溃应用程序

来自分类Dev

Eclipse Android应用程序崩溃

来自分类Dev

Android setContentView使我的应用程序崩溃

来自分类Dev

Android JSoup使应用程序崩溃

来自分类Dev

Android上的TabHost使应用程序崩溃

来自分类Dev

Android应用程序不断与Tabhost崩溃

来自分类Dev

iTextG导致应用程序崩溃(Android)

来自分类Dev

NullPointerException使Android应用程序崩溃

来自分类Dev

Android应用程序在setOnItemSelectedListener上崩溃

来自分类Dev

Android WebView loadURL崩溃的应用程序?

Related 相关文章

热门标签

归档