1

안녕하세요. 인턴쉽을위한 앱을 만들고 있는데 오류가 있습니다.
날이오류 캡처 사진 및 디스플레이 썸네일 android studio

이 activity.java

private void dispatchTakePictureIntent() { 
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    // Ensure that there's a camera activity to handle the intents 
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
     // Create the File where the photo should go 
     File photoFile = null; 
     try { 
      photoFile = createImageFile(); 
     } catch (IOException ex) { 
      // Error occurred while creating the File 
     } 
     // Continue only if the File was successfully created 
     if (photoFile != null) { 
      Uri photoURI = FileProvider.getUriForFile(this, "com.example.android.provider", photoFile); 
      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); 
      startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO); 
     } 
    } 
} 

입니다 해결 도와주세요 이것은() 코드 onActivityResult를 수 있습니다 :

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data){ 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == RESULT_OK && requestCode == REQUEST_TAKE_PHOTO) { 
     Bundle extras = data.getExtras(); 
     Bitmap imageBitmap = (Bitmap) extras.get("data"); 
     imageView.setImageBitmap(imageBitmap); 
    } 
    if (resultCode == Activity.RESULT_OK){ 
     if (requestCode == PICK_FILE_REQUEST){ 
      if (data == null){ 
       return; 
      } 

      Uri selectedFileUri = data.getData(); 
      selectedFilePath = FilePath.getPath(this, selectedFileUri); 
      Log.i(TAG,"Selected File Path:"+selectedFilePath); 

      if (selectedFilePath != null && !selectedFilePath.equals("")){ 
       tv_file_name.setText(selectedFilePath); 
      }else{ 
       Toast.makeText(this, "Cannot upload file to server", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 
} 

그리고 난이

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { }} to activity {com.example.febryan.apptest/com.example.febryan.apptest.RequestActivity2}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.os.Bundle.get(java.lang.String)' on a null object reference 
                      at android.app.ActivityThread.deliverResults(ActivityThread.java:4324) 
                      at android.app.ActivityThread.handleSendResult(ActivityThread.java:4367) 
                      at android.app.ActivityThread.-wrap19(Unknown Source:0) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1649) 
                      at android.os.Handler.dispatchMessage(Handler.java:105) 
                      at android.os.Looper.loop(Looper.java:164) 
                      at android.app.ActivityThread.main(ActivityThread.java:6541) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
                     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.os.Bundle.get(java.lang.String)' on a null object reference 
                      at com.example.febryan.apptest.RequestActivity2.onActivityResult(RequestActivity2.java:311) 
                      at android.app.Activity.dispatchActivityResult(Activity.java:7235) 
                      at android.app.ActivityThread.deliverResults(ActivityThread.java:4320) 

을 가지고하시기 바랍니다 이 문제를 해결하도록 도와주세요. thx

답변

1

기본 안드로이드 카메라 응용 프로그램은 반환 된 인 텐트의 축소판을 다시 전달할 때만 null이 아닌 인 텐트를 반환합니다. 쓸 URI가있는 EXTRA_OUTPUT을 전달하면 null 의도가 반환되고 전달 된 URI에 그림이 나타납니다.

의도 한대로 EXTRA_OUTPUT 위치를 전달하면 항상 데이터로 null이 반환됩니다. 즉 귀하의 경우 지금 사진/캡처 된 이미지는 photoURI 경로에 있습니다.

그래서 onActivityResult()에서 데이터 인 텐트를 조사하는 대신 photoURI 경로에서 가져옵니다. below.Here의 사진 파일처럼 당신이 썸네일 이미지에 대한 언급 아마, 당신 자르고 이미지의 크기를 조절하고 싶은 경우 실제 카메라 이미지

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data){ 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == RESULT_OK && requestCode == REQUEST_TAKE_PHOTO) { 

     Uri uri = Uri.fromFile(photoFile); // Here photo file is the file EXTRA_OUTPUT location where you saved the actual camera image 
     Bitmap bitmap; 
     try { 
      bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); 
      bitmap = crupAndScale(bitmap, 300); // if you mind scaling 
      pofileImageView.setImageBitmap(bitmap); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     imageView.setImageBitmap(bitmap); 
    } 

} 

저장된 파일 EXTRA_OUTPUT 위치입니다.

public static Bitmap crupAndScale (Bitmap source,int scale){ 
    int factor = source.getHeight() <= source.getWidth() ? source.getHeight(): source.getWidth(); 
    int longer = source.getHeight() >= source.getWidth() ? source.getHeight(): source.getWidth(); 
    int x = source.getHeight() >= source.getWidth() ?0:(longer-factor)/2; 
    int y = source.getHeight() <= source.getWidth() ?0:(longer-factor)/2; 
    source = Bitmap.createBitmap(source, x, y, factor, factor); 
    source = Bitmap.createScaledBitmap(source, scale, scale, false); 
    return source; 
} 
+1

작동합니다! 고마워!!! 지금 내 서버에 업로드해야합니다 –

+0

환영합니다. 도와 줄 수있어서 기뻐 :) –