2012-05-30 51 views
1

我在從我的圖庫中選擇一個圖像並在我的應用程序中使用該圖像時遇到了一些問題。 我用這個意圖:onActivityResult在ACTION_PICK完成之前調用

Intent i = new Intent(Intent.ACTION_PICK, 
           android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
         startActivityForResult(i, ACTIVITY_SELECT_PHOTO); 

而且使我的畫廊,我可以選擇一個圖像。 但是現在我選擇一個,onActivityResult立即被調用, 而ACTION_PICK還沒有完成所有的事情。那麼,我想這就是問題所在。 我讀過了,我應該嘗試將launchMode更改爲清單中活動的「singleTop」,但這不起作用。或者我應該更改「ACTION_PICK」 - 活動的launchMode? 這甚至可能嗎?

final static int ACTIVITY_SELECT_PHOTO = 0; 
final static int ACTIVITY_CAMERA_PHOTO = 1; 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 
    Log.d("onActivityresult", "req = " + requestCode + ", result = " + resultCode); 
    switch(requestCode) { 
    case ACTIVITY_SELECT_PHOTO: 
     if(resultCode == RESULT_OK){ 



      Uri selectedImageUri=imageReturnedIntent.getData(); 
      String actualPath=getRealPathFromURI(selectedImageUri); 
      File file=new File(actualPath); 
      Bitmap b=decodeFile(file); //this is new bitmap which you can use for your purpose 


      try { 

       ByteArrayOutputStream os = new ByteArrayOutputStream(); 
       b.compress(Bitmap.CompressFormat.PNG, 55, os); 
       compressedByteArray = os.toByteArray(); 
       iv.setImageBitmap(b); 
       currentUser.put("picture", compressedByteArray); 
       Toast t = Toast.makeText(this, "Uploading picture...", Toast.LENGTH_LONG); 
       t.show(); 
       currentUser.save(); 
      } catch (ParseException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
case ACTIVITY_CAMERA_PHOTO: 
     if(resultCode == RESULT_OK){ 

       Bundle extras = imageReturnedIntent.getExtras(); 

//THE LINE BELOW THIS ONE GIVES NULLPOINTEREX WHICH IS OBVIOUS BECAUSE IT's ANOTHER //CASE  
         Bitmap bmp = (Bitmap)extras.get("data"); 
      ByteArrayOutputStream os = new ByteArrayOutputStream(); 
      bmp.compress(Bitmap.CompressFormat.PNG, 55, os); 
      compressedByteArray = os.toByteArray(); 
      bmp = BitmapFactory.decodeByteArray(compressedByteArray, 0, compressedByteArray.length); 
      iv.setImageBitmap(bmp); 
      currentUser.put("picture", compressedByteArray); 

      } 
      try { 
       Toast t = Toast.makeText(this, "Uploading picture...", Toast.LENGTH_LONG); 
       t.show(); 
       currentUser.save(); 
      } catch (ParseException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

的ResultCode = -1(所以RESULT_OK) ,但它給我一個錯誤:

了java.lang.RuntimeException:不提供結果ResultInfo {誰= NULL,要求= 0,結果= -1 ,data = Intent {dat = content:// media/external/images/media/173}} to activity {com.tapazz/com.tapazz.ShowProfileActivity}:java.lang.NullPointerException

nullPointerException來自不同的RequestCode(參見上面的「THIS LINE」)

應用程序停止,但是當我重新啓動它時,我發現它已經選取了它應該做的照片

回答

0

這可能與您的switch()聲明不是break之後的每種情況相關。所以,如果它進入ACTIVITY_SELECT_PHOTO情況下,它也將處理ACTIVITY_CAMERA_PHOTO以及

switch() { 
    case 1: 
     break; 

    case 2: 
     break; 
} 

注意,你總是需要一個break;聲明在每個case結束。

+1

好吧,這是我的愚蠢......這解決了問題..謝謝男人:p – dumazy

相關問題