2013-10-13 44 views
0

得到的圖像我想要從畫廊的形象,但我有一些問題。未能提供結果從畫廊

這是logcat的:

10-13 15:56:34.062: E/AndroidRuntime(25446): FATAL EXCEPTION: main 
    10-13 15:56:34.062: E/AndroidRuntime(25446): java.lang.RuntimeException: Failure delivering result ResultInfo{who=Full List, request=1, result=-1, data=Intent { dat=content://media/external/images/media/31 (has extras) }} to activity {com.freerdp.afreerdp/com.freerdp.freerdpcore.presentation.TabViewActivity}: java.lang.NullPointerException 
    10-13 15:56:34.062: E/AndroidRuntime(25446): at android.app.ActivityThread.deliverResults(ActivityThread.java:3224) 
    10-13 15:56:34.062: E/AndroidRuntime(25446): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3267) 
    10-13 15:56:34.062: E/AndroidRuntime(25446): at android.app.ActivityThread.access$1200(ActivityThread.java:146) 
    10-13 15:56:34.062: E/AndroidRuntime(25446): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308) 
    10-13 15:56:34.062: E/AndroidRuntime(25446): at android.os.Handler.dispatchMessage(Handler.java:99) 
    10-13 15:56:34.062: E/AndroidRuntime(25446): at android.os.Looper.loop(Looper.java:137) 
    10-13 15:56:34.062: E/AndroidRuntime(25446): at android.app.ActivityThread.main(ActivityThread.java:4949) 
    10-13 15:56:34.062: E/AndroidRuntime(25446): at java.lang.reflect.Method.invokeNative(Native Method) 
    10-13 15:56:34.062: E/AndroidRuntime(25446): at java.lang.reflect.Method.invoke(Method.java:511) 
    10-13 15:56:34.062: E/AndroidRuntime(25446): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1043) 
    10-13 15:56:34.062: E/AndroidRuntime(25446): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:810) 
    10-13 15:56:34.062: E/AndroidRuntime(25446): at dalvik.system.NativeStart.main(Native Method) 
    10-13 15:56:34.062: E/AndroidRuntime(25446): Caused by: java.lang.NullPointerException 
    10-13 15:56:34.062: E/AndroidRuntime(25446): at com.freerdp.freerdpcore.presentation.ChangeView.onActivityResult(ChangeView.java:270) 
    10-13 15:56:34.062: E/AndroidRuntime(25446): at android.app.ActivityGroup.dispatchActivityResult(ActivityGroup.java:122) 
    10-13 15:56:34.062: E/AndroidRuntime(25446): at android.app.ActivityThread.deliverResults(ActivityThread.java:3220) 
    10-13 15:56:34.062: E/AndroidRuntime(25446): ... 11 more 
    10-13 16:01:40.195: I/Process(25446): Sending signal. PID: 25446 SIG: 9 

這是onActivityResult()代碼:

@Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      if(requestCode == PICK_IMAGE && data != null && data.getData() != null) { 
       Uri _uri = data.getData(); 
       Log.v(TAG,"getData()"); 
       //User had pick an image. 
       Cursor cursor = getContentResolver().query(_uri, new String[] { android.provider.MediaStore.Images.ImageColumns.DATA }, null, null, null); 
       cursor.moveToFirst(); 

       //Link to the image 
       final String imageFilePath = cursor.getString(0); 
       File f = new File(imageFilePath); 
       Log.v(TAG, "path:"+ imageFilePath); 
       cursor.close(); 


      ImageView image = (ImageView) findViewById(R.id.list_image); 
      Bitmap bitmap = BitmapFactory.decodeFile(f.getAbsolutePath()); 
      image.setImageBitmap(bitmap); 
     } 
     } 

這是Intent

Intent intent = new Intent(); 
       intent.setType("image/*"); 
       intent.setAction(Intent.ACTION_GET_CONTENT); 
       startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE); 

你能告訴我什麼地方錯了我碼?

+0

'由於:java.lang.NullPointerException 10-13 15:56:34.062:E/AndroidRuntime(25446):at com.freerdp.freerdpcore.presentation.ChangeView.onActivityResult(ChangeView.java:270)'which是270線嗎?並學會使用調試器。你會在幾分鐘內發現問題。 – Simon

+0

image.setImageBitmap(bitmap); – SegFault

+0

「圖像」或「位圖」爲空。在這條線上放一個斷點,看看它是哪一個。 – Simon

回答

0

使用您的onActivityResult方法,這下面的代碼,假設你requestCode是1000。它應該工作的罰款。

if (requestCode == 1000) { 
       if (resultCode == Activity.RESULT_OK) { 
        Uri selectedImage = data.getData(); 
        System.out.println("Content Path : " + selectedImage.toString()); 

        if (selectedImage != null) { 
         img1.setImageBitmap(getScaledBitmap(selectedImage)); 
        } else { 
         Toast.makeText(PhotoTake.this, "Error getting Image", 
           Toast.LENGTH_SHORT).show(); 
        }   
       } else if (resultCode == Activity.RESULT_CANCELED) { 
        Toast.makeText(PhotoTake.this, "No Photo Selected", 
          Toast.LENGTH_SHORT).show(); 
       } 
      } 

上面使用的私人位圖getScaledBitmap(Uri uri)方法就是這樣。

private Bitmap getScaledBitmap(Uri uri){ 
     Bitmap thumb = null ; 
     try { 
      ContentResolver cr = getContentResolver(); 
      InputStream in = cr.openInputStream(uri); 
      BitmapFactory.Options options = new BitmapFactory.Options(); 
      options.inSampleSize=8; 
      thumb = BitmapFactory.decodeStream(in,null,options); 
     } catch (FileNotFoundException e) { 
      Toast.makeText(PhotoTake.this , "File not found" , Toast.LENGTH_SHORT).show(); 
     } 
     return thumb ; 
    } 

希望它有幫助。