2016-03-08 71 views
3

我一直在努力想弄清楚如何使用Android設備拍攝照片,並將該照片上傳到Parse.com。我明顯做錯了事,因爲我所得到的只是縮略圖。拍攝照片並將完整圖像上傳至Parse.com?

我一直在搜索谷歌,並且遇到了一些非常混亂/令人費解的做我以後(我認爲?)的方式,但我認爲如果獲得縮略圖非常簡單,爲什麼要獲取完整的形象是如此不同或困難?

編輯:我認爲主要問題是,當我看着onActivityResult中的變量fileUri爲null。這在某些設備上似乎很常見。我使用的是舊的Droid和運行Galaxy S5的genymotion模擬器。也許這是我的問題?

這裏是我的代碼:

public void takePhoto() { 

    // Check Camera 
    if (getApplicationContext().getPackageManager().hasSystemFeature(
      PackageManager.FEATURE_CAMERA)) { 

     // Open default camera 
     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 

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

    } else { 
     Toast.makeText(getApplication(), "Camera not supported", Toast.LENGTH_LONG).show(); 
    } 

} 

而該部分工作正常,和這裏的onActivityResult:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    byte[] image_byte_array; 

    if (data != null) { 

     if (requestCode == 100 && resultCode == RESULT_OK) { 

      Toast.makeText(getApplicationContext(), "Saving File...", Toast.LENGTH_LONG).show(); 

      Bitmap photo = (Bitmap) data.getExtras().get("data"); 

      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 

      photo.compress(Bitmap.CompressFormat.JPEG, 100, stream); 

      image_byte_array = stream.toByteArray(); 

      ParseFile photo = new ParseFile("photo.jpg", image_byte_array); 

      ParseObject parseObject = new ParseObject("Items"); 
      parseObject.put("photo", photo); 

      parseObject.saveInBackground(new SaveCallback() { 
       @Override 
       public void done(ParseException e) { 

        if (e != null) { 

         Toast.makeText(getApplicationContext(), "Error: " + e.toString(), Toast.LENGTH_LONG).show(); 

        } else { 

        } 
       } 
      }); 


      photo.saveInBackground(new SaveCallback() { 
       @Override 
       public void done(ParseException e) { 

        if (e != null) { 

         Toast.makeText(getApplicationContext(), "Error: " + e.toString(), Toast.LENGTH_LONG).show(); 

        } else { 

         Log.i("ParseFile", "--- File is Saved ---"); 
        } 
       } 
      }); 

     } else { 

      finish(); 

     } 

    } 
} 

上面的代碼工作完全正常,但正如前面所提到的,它只是創建和上傳一個小的5k縮略圖jpg圖形。我想要完整的圖像。我意識到在上傳之前我必須將其縮小,但是一旦我找出如何獲取主圖像,我會繼續努力。

我有相應的清單條目READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE。另外,一旦完成上傳,我甚至不需要該圖像。

我錯過了什麼?

回答

0

在這條路上嘗試.. 你的代碼完成,但先救ParseFile然後後保存解析表像...

final ParseObject parseObject = new ParseObject("Items"); 

    parseObject.put("photo", photo); 
    photo.saveInBackground(new SaveCallback() { 
     @Override 
     public void done(ParseException e) { 

      if (e != null) { 

       Toast.makeText(getApplicationContext(), "Error: " + e.toString(), Toast.LENGTH_LONG).show(); 

      } else { 

       Log.i("ParseFile", "--- File is Saved ---"); 
       parseObject.saveInBackground(new SaveCallback() { 
        @Override 
        public void done(ParseException e) { 

         if (e != null) { 

          Toast.makeText(getApplicationContext(), "Error: " + e.toString(), Toast.LENGTH_LONG) 
            .show(); 

         } else { 

         } 
        } 
       }); 
      } 
     } 
    }); 

現在檢查項目表。