这是我的第一个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);