2012-02-27 1 views
2

これが私の最初のAndroidアプリだと私はDjangoのサーバーにカメラで撮影した画像(ICS 4.0)をPOSTしようとしています。私はNULLポインタの例外エラーが発生しているが、私はこれが発生している手がかりがありません。また、私はアップロードしようとすると、アプリケーションがクラッシュしません。何が起こっているのか分かりません。私は断片を使用しています。ここでDjango ServerにAndroid HTTPPOST jpegを使用するにはどうすればよいですか?

は私のDjangoのポストコードです:ここで

def post(self, request, *args, **kwargs): 
     image = get_object_or_404(Img, **kwargs) 

     inst = Instance(stream=image.stream) 
     uploaded_file = \ 
      File('-.jpg', self.FILES[0].read(), 'image/jpeg') 
     setattr(inst, 'full', uploaded_file) 
     inst.save() 

     return HttpResponse(status=HTTP_201_CREATED) 

は、私はカメラアクションの後に私の断片に持っているものです:事前に

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) { 
     if (resultCode == Activity.RESULT_OK) { 
      // put the image onto server 
      text.setText(outputFileUri.toString()); 

      try { 
       HttpClient httpClient = new DefaultHttpClient(); 
       HttpContext localContext = new BasicHttpContext(); 
       HttpPost postRequest = new HttpPost("http://192.168.1.2:8000/v1/14/1/imagesink/1/"); 
       MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 

       bm = BitmapFactory.decodeFile("/sdcard/test.jpg"); 
       Bitmap bmpCompressed = Bitmap.createScaledBitmap(bm, 640, 480, true); 
       ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
       bmpCompressed.compress(CompressFormat.JPEG, 100, bos); 
       byte[] bytes = bos.toByteArray(); 
       reqEntity.addPart("myImage", new ByteArrayBody(bytes, "temp.jpg")); 
       postRequest.setEntity(reqEntity); 
       HttpResponse response = httpClient.execute(postRequest,localContext); 

       BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8")); 
       String sResponse = reader.readLine(); 

      } catch (Exception e) { 
       // handle exception here 
       Log.v("myApp", "Some error came up"); 
      } 

     } else if (resultCode == Activity.RESULT_CANCELED) { 
      // User cancelled the image capture 
     } else { 
      // Image capture failed, advise user 
     } 
    } 
} 

ありがとう!

ERROR:

 E/AndroidRuntime(19787): FATAL EXCEPTION: main 
    java.lang.RuntimeException: Failure delivering result ResultInfo{who=android:fragment:0, request=1, result=-1, data=null} to activity {com.prism.app/com.prism.app.PrismActivity}: java.lang.NullPointerException: println needs a message 
    at android.app.ActivityThread.deliverResults(ActivityThread.java:2976) 
    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3019) 
    at android.app.ActivityThread.access$1100(ActivityThread.java:122) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1176) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:4340) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
at dalvik.system.NativeStart.main(Native Method) 
     Caused by: java.lang.NullPointerException: println needs a message 
at android.util.Log.println_native(Native Method) 
at android.util.Log.e(Log.java:231) 
at com.prism.app.OneFragmentTab.onActivityResult(OneFragmentTab.java:106) 
    at android.app.Activity.dispatchActivityResult(Activity.java:4653) 
    at android.app.ActivityThread.deliverResults(ActivityThread.java:2972) 
    ... 11 more 
+0

nullポインタ例外が発生した場合は、例外トレースバックを送信してください。問題がどこにあるかを示します。 –

答えて

0

次のコードは、ビットマップは、メソッドを次の文字列内にBase64をコードにビットマップを変換するには画像を取得した後、画像

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(cameraIntent, CAMERA_REQUEST); 

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 

     if (requestCode == CAMERA_REQUEST) 
    { 
     Bitmap photo = (Bitmap) data.getExtras().get("data"); 
    }  
} 

をキャプチャする方法であることは、文字列

にビットマップに変換されます
public String convert_bitmap_to_string(Bitmap bitmap) 
    { 
      ByteArrayOutputStream full_stream = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.PNG, 100, full_stream); 
     byte[] full_bytes = full_stream.toByteArray(); 
     String Str_image = Base64.encodeToString(full_bytes, Base64.DEFAULT); 

     return Str_image; 
    } 

ImageStringを変換した後、このImageStringを使用して送信します。 Http Postメソッド

関連する問題