【问题标题】:Facing issue with camera application相机应用程序面临问题
【发布时间】:2014-07-08 08:44:11
【问题描述】:

我正在开发一个相机应用程序,我必须在其中单击图像 并将其保存在新创建的 SD 卡图像文件夹中

这是我的MainActivity.java 文件。

 public class MainActivity extends Activity {


        Button cambutton;
        ImageView photoImage=null;

        private static final String TAG = "CallCamera";
        private static final int CAPTURE_IMAGE_ACTIVITY_REQ = 0;

        Uri fileUri=null;
        //ImageView photoImage1 = null;

        private File getOutputPhotoFile() {

              File directory = new File(Environment.getExternalStoragePublicDirectory(
                            Environment.DIRECTORY_PICTURES), getPackageName());

              if (!directory.exists()) {
                if (!directory.mkdirs()) {
                  Log.e(TAG, "Failed to create storage directory.");
                  return null;
                }
              }

              String timeStamp = new SimpleDateFormat("yyyMMdd_HHmmss", Locale.US).format(new Date());

              return new File(directory.getPath() + File.separator + "IMG_"  
                                + timeStamp + ".jpg");
        }

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

            Button camButton = (Button)findViewById(R.id.btncam);
            ImageView photoImage = (ImageView)findViewById(R.id.iv);

            camButton.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub

                    Intent i = new Intent (MediaStore.ACTION_IMAGE_CAPTURE);

                    fileUri = Uri.fromFile(getOutputPhotoFile());
                    i.putExtra(MediaStore.EXTRA_OUTPUT,fileUri);

                    startActivityForResult(i, CAPTURE_IMAGE_ACTIVITY_REQ);

                }
            });

        }

        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
              if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQ) {
                if (resultCode == RESULT_OK) {
                  Uri photoUri = null;
                  if (data == null) {
                    // A known bug here! The image should have saved in fileUri
                    Toast.makeText(this, "Image saved successfully", 
                                   Toast.LENGTH_LONG).show();
                    photoUri = fileUri;
                  } else {
                    photoUri = data.getData();
                    Toast.makeText(this, "Image saved successfully in: " + data.getData(), 
                                   Toast.LENGTH_LONG).show();
                  }
                  showPhoto(photoUri.getPath());


                } else if (resultCode == RESULT_CANCELED) {
                  Toast.makeText(this, "Cancelled", Toast.LENGTH_SHORT).show();
                } else {
                  Toast.makeText(this, "Callout for image capture failed!", 
                                 Toast.LENGTH_LONG).show();
                }
              }
        }

        private void showPhoto(String photoUri) {
              File imageFile = new File (photoUri);
              if (imageFile.exists()){
                 Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath());
                 BitmapDrawable drawable = new BitmapDrawable(this.getResources(), bitmap);
                 photoImage.setScaleType(ImageView.ScaleType.FIT_CENTER);
                 photoImage.setImageDrawable(drawable);
              }       
        }

    }

当我运行它时,它运行得非常好,但是当我尝试保存图像时,应用程序崩溃了。

我的logcat 在下面给出..

 07-08 03:51:02.976: W/dalvikvm(2104): threadid=1: thread exiting with uncaught exception (group=0xb1d4bb20)
07-08 03:51:02.986: E/AndroidRuntime(2104): FATAL EXCEPTION: main
07-08 03:51:02.986: E/AndroidRuntime(2104): Process: com.dev.camera, PID: 2104
07-08 03:51:02.986: E/AndroidRuntime(2104): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=null} to activity {com.dev.camera/com.dev.camera.MainActivity}: java.lang.NullPointerException
07-08 03:51:02.986: E/AndroidRuntime(2104):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3365)
07-08 03:51:02.986: E/AndroidRuntime(2104):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3408)
07-08 03:51:02.986: E/AndroidRuntime(2104):     at android.app.ActivityThread.access$1300(ActivityThread.java:135)
07-08 03:51:02.986: E/AndroidRuntime(2104):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
07-08 03:51:02.986: E/AndroidRuntime(2104):     at android.os.Handler.dispatchMessage(Handler.java:102)
07-08 03:51:02.986: E/AndroidRuntime(2104):     at android.os.Looper.loop(Looper.java:136)
07-08 03:51:02.986: E/AndroidRuntime(2104):     at android.app.ActivityThread.main(ActivityThread.java:5017)
07-08 03:51:02.986: E/AndroidRuntime(2104):     at java.lang.reflect.Method.invokeNative(Native Method)
07-08 03:51:02.986: E/AndroidRuntime(2104):     at java.lang.reflect.Method.invoke(Method.java:515)
07-08 03:51:02.986: E/AndroidRuntime(2104):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
07-08 03:51:02.986: E/AndroidRuntime(2104):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
07-08 03:51:02.986: E/AndroidRuntime(2104):     at dalvik.system.NativeStart.main(Native Method)
07-08 03:51:02.986: E/AndroidRuntime(2104): Caused by: java.lang.NullPointerException
07-08 03:51:02.986: E/AndroidRuntime(2104):     at com.dev.camera.MainActivity.showPhoto(MainActivity.java:126)
07-08 03:51:02.986: E/AndroidRuntime(2104):     at com.dev.camera.MainActivity.onActivityResult(MainActivity.java:95)
07-08 03:51:02.986: E/AndroidRuntime(2104):     at android.app.Activity.dispatchActivityResult(Activity.java:5423)
07-08 03:51:02.986: E/AndroidRuntime(2104):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3361)
07-08 03:51:02.986: E/AndroidRuntime(2104):     ... 11 more
07-08 03:51:08.536: I/Process(2104): Sending signal. PID: 2104 SIG: 9

【问题讨论】:

  • @Sreekanth 在 StackOverFlow 中,我已经看到 10 多个问题询问相同的错误,但每个问题背后的原因都不同。所以不要告诉我任何可能不是类型的链接。我想先要求阅读我的问题,然后检查我的 logcat。谢谢
  • 如果您真的需要帮助,请指出您面临的问题并找出您面临的问题,这不是一个好习惯,当出现问题时,所有只是发布完整代码和完整代码,甚至他们都试图找到它发生的地方
  • @Sreekanth 很容易记下一个问题......这很好,因为当你没有答案时......只需简单地将问题标记为否定。先生,如果您阅读了我的代码,您会发现我已经提到了我出错的地方。
  • 这不是你出错的地方,请调试应用程序并找出错误

标签: android camera android-sdcard


【解决方案1】:

1) 在点击事件中: 意图意图 = 新意图(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, 1);

2)在onActivityResult中:

if ((requestCode == 1)) {

                // -----------path getting from intent------------
                String photoPath = null;
                Cursor cursor = getContentResolver().query(
                        Media.EXTERNAL_CONTENT_URI,
                        new String[] { Media.DATA,         Media.DATE_ADDED,MediaStore.Images.ImageColumns.ORIENTATION },
                        Media.DATE_ADDED, null, "date_added ASC");
                if (cursor != null && cursor.moveToFirst()) {
                    do {
                        Uri uri = Uri.parse(cursor.getString(cursor    .getColumnIndex(Media.DATA)));
                        photoPath = uri.toString();

                    } while (cursor.moveToNext());
                    cursor.close();
                }
 }

3) 在您的清单中:

【讨论】:

  • 现在我收到此错误... 07-08 03:51:02.986: E/AndroidRuntime(2104): FATAL EXCEPTION: main 07-08 03:51:02.986: E/AndroidRuntime( 2104): 进程: com.dev.camera, PID: 2104 07-08 03:51:02.986: E/AndroidRuntime(2104): java.lang.RuntimeException: 传递结果失败 ResultInfo{who=null, request=0, result =-1,data=null} 到活动 {com.dev.camera/com.dev.camera.MainActivity}:java.lang.NullPointerException 07-08 03:51:02.986:E/AndroidRuntime(2104):在 android。 app.ActivityThread.deliverResults(ActivityThread.java:3365)
猜你喜欢
  • 2016-04-05
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 2015-09-11
相关资源
最近更新 更多