我如何使用Android HTTPPOST JPEG到Django的服务器? [英] How do I use Android HTTPPOST jpeg to Django Server?
问题描述
这是我的第一个Android应用程序,我试图张贴摄像头(ICS 4.0)关于采取措施,Django的服务器映像。我一直得到一个空指针异常错误,但我不知道该在哪里发生。此外,当我没有应用程序崩溃试图上传时。我不知道是怎么回事。我使用的片段。
下面是我的Django后code:
DEF后(个体经营,请求,* ARGS,** kwargs):
图像= get_object_or_404(图,** kwargs) 研究所=实例(流= image.stream)
uploaded_file = \\
文件( - 。JPG,self.FILES [0] .read(),图像/ JPEG')
SETATTR(研究所,'全',uploaded_file)
inst.save() 返回的Htt presponse(状态= HTTP_201_CREATED)
下面是我在我的片段相机操作后:
公共无效的onActivityResult(INT申请code,INT结果code,意图数据){
如果(要求code == CAPTURE_IMAGE_ACTIVITY_REQUEST_ code){
如果(结果code == Activity.RESULT_OK){
//把图像投影到服务器
text.setText(outputFileUri.toString()); 尝试{
HttpClient的HttpClient的=新DefaultHttpClient();
HttpContext的localContext =新BasicHttpContext();
HttpPost postRequest =新HttpPost(http://192.168.1.2:8000/v1/14/1/imagesink/1/);
MultipartEntity reqEntity =新MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); BM = BitmapFactory.de codeFILE(/ SD卡/ test.jpg放在);
位图bmpCom pressed = Bitmap.createScaledBitmap(BM,640,480,TRUE);
ByteArrayOutputStream BOS =新ByteArrayOutputStream();
bmpCom pressed.com preSS(比较pressFormat.JPEG,100,BOS);
字节[]字节= bos.toByteArray();
reqEntity.addPart(MYIMAGE,新ByteArrayBody(字节temp.jpg));
postRequest.setEntity(reqEntity);
HTT presponse响应= httpClient.execute(postRequest,localContext); 的BufferedReader读者=新的BufferedReader(新的InputStreamReader(response.getEntity()的getContent(),UTF-8)。);
串sResponse = reader.readLine(); }赶上(例外五){
//这里处理异常
Log.v(对myApp,某些错误想出了);
} }否则如果(结果code == Activity.RESULT_CANCELED){
//用户取消了图像采集
}其他{
//图像捕捉失败,提醒用户
}
}
}
在此先感谢!
ERROR:
E / AndroidRuntime(19787):致命异常:主要
了java.lang.RuntimeException:不提供结果ResultInfo {谁=安卓片段:0,请求= 1,结果= -1,数据= NULL}到活动{} com.prism.app/com.prism.app.PrismActivity:显示java.lang.NullPointerException:需要的println消息
在android.app.ActivityThread.deliverResults(ActivityThread.java:2976)
在android.app.ActivityThread.handleSendResult(ActivityThread.java:3019)
在android.app.ActivityThread.access $ 1100(ActivityThread.java:122)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1176)
在android.os.Handler.dispatchMessage(Handler.java:99)
在android.os.Looper.loop(Looper.java:137)
在android.app.ActivityThread.main(ActivityThread.java:4340)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:511)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
在dalvik.system.NativeStart.main(本机方法)
显示java.lang.NullPointerException:引起的println需要一个消息
在android.util.Log.println_native(本机方法)
在android.util.Log.e(Log.java:231)
在com.prism.app.OneFragmentTab.onActivityResult(OneFragmentTab.java:106)
在android.app.Activity.dispatchActivityResult(Activity.java:4653)
在android.app.ActivityThread.deliverResults(ActivityThread.java:2972)
... 11更多
以下code是如何捕捉图像
意图cameraIntent =新意图(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent,CAMERA_REQUEST);保护无效的onActivityResult(INT申请code,INT结果code,意图数据)
{ 如果(要求code == CAMERA_REQUEST)
{
。位图的照片=(位图)data.getExtras()获得(数据);
}
}
获取图像中的位图然后将其转换位图到字符串下面的方法的Base64编码后的位图转换为字符串
公共字符串convert_bitmap_to_string(位图位图)
{
ByteArrayOutputStream full_stream =新ByteArrayOutputStream();
bitmap.com preSS(Bitmap.Com pressFormat.PNG,100,full_stream);
字节[] = full_bytes full_stream.toByteArray();
字符串Str_image = Base64.en codeToString(full_bytes,Base64.DEFAULT); 返回Str_image;
}
然后转换使用和imagestring HTTP POST方法发送和imagestring后
的HttpClient HttpClient的=新DefaultHttpClient();
HttpPost httppost =新HttpPost(HTTP://www.URL ...);
清单<&的NameValuePair GT; namevaluepairs中=新的ArrayList<&的NameValuePair GT;(1); nameValuePairs.add(新BasicNameValuePair(参数名,Str_image)); HTT presponse响应= httpclient.execute(httppost);
HttpEntity实体= response.getEntity();
字符串的responseText = EntityUtils.toString(实体);
This is my first android app and I am trying to POST images taken on the camera (ICS 4.0) to a Django server. I have been getting a NULL pointer exception error but I have no clue where this is occurring. Also, When I don't the app crashes when trying to upload. I'm not sure what is going on. I am using Fragments.
Here is my Django post code:
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)
Here is what I have in my Fragment after the camera action:
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
}
}
}
Thanks in advance!
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
following code is how to capture image
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");
}
}
after getting image in to bitmap then convert bitmap in to encoding Base64 in string following method is convert bitmap to string
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;
}
after converting ImageString then Send this ImageString using Http Post method
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.URL...");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("param name",Str_image));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
String responseText = EntityUtils.toString(entity);
这篇关于我如何使用Android HTTPPOST JPEG到Django的服务器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!