我正在尝试使用MultipartEntity发送纬度和经度的图像和值。纬度和经度的值存储在名为plat和plong的单独变量中。我能够将图像发送到服务器,但不能同时发送纬度和经度。在服务器端,只有Latitude最终插入数据库。 Bellow是我用来将文件和字符串发送到服务器的代码。任何人都可以建议我做错了吗?
private class UploadTask extends AsyncTask<Bitmap, Void, Void> {
protected Void doInBackground(Bitmap... bitmaps) {
if (bitmaps[0] == null)
return null;
setProgress(0);
Bitmap bitmap = bitmaps[0];
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); // convert
// Bitmap
// to
// ByteArrayOutputStream
InputStream in = new ByteArrayInputStream(stream.toByteArray()); // convert
// ByteArrayOutputStream
// to
// ByteArrayInputStream
DefaultHttpClient httpclient = new DefaultHttpClient();
try {
HttpPost httppost = new HttpPost(
"http://www.example.com/index.php"); // server
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("myFile",
System.currentTimeMillis() + ".jpg", in);
httppost.setEntity(reqEntity);
reqEntity.addPart("long",String.valueOf(plong));
reqEntity.addPart("lat",String.valueOf(plat));
Log.e(TAG, "request " + httppost.getRequestLine());
HttpResponse response = null;
try {
response = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (response != null)
Log.i(TAG, "response "
+ response.getStatusLine().toString());
} finally {
}
} finally {
}
if (in != null) {
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
以下是MultipartEntity类中的addPart()方法。
ByteArrayOutputStream out = new ByteArrayOutputStream();
public void addPart(final String key, final String value) {
writeFirstBoundaryIfNeeds();
try {
out.write(("Content-Disposition: form-data; name=\"" +key+"\"\r\n").getBytes());
out.write("Content-Type: text/plain; charset=UTF-8\r\n".getBytes());
out.write("Content-Transfer-Encoding: 8bit\r\n\r\n".getBytes());
out.write(value.getBytes());
out.write(("\r\n--" + boundary + "\r\n").getBytes());
} catch (final IOException e) {
}
}
答案 0 :(得分:1)
尝试使用它,
reqEntity.addPart("long",new StringBody(plong));
reqEntity.addPart("lat",new StringBody(plat));
// or plong.toString() and plat.toString() depending on your plong and plat datatype
//and then add to httppost
httppost.setEntity(reqEntity);
发送纬度和经度。
但是你可以查看这个link,这里有很好的例子,对理解
非常有帮助答案 1 :(得分:0)
在添加请求部分后设置实体,并将new StringBody()
添加到String.valueOf()
:
这样做,这可以帮助你: -
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("myFile",
System.currentTimeMillis() + ".jpg", in);
reqEntity.addPart("long",new StringBody(String.valueOf(plong)));
reqEntity.addPart("lat",new StringBody(String.valueOf(plat)));
httppost.setEntity(reqEntity);
答案 2 :(得分:0)
是的@Harsh是对的......你正在设置实体....然后将零件数据添加到多部门......
更改您的代码......
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("myFile",
System.currentTimeMillis() + ".jpg", in);
httppost.setEntity(reqEntity);
reqEntity.addPart("long",String.valueOf(plong));
reqEntity.addPart("lat",String.valueOf(plat));
到此......
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("myFile",
System.currentTimeMillis() + ".jpg", in);
//httppost.setEntity(reqEntity);//remove this line and place after setting all part values
reqEntity.addPart("long",new StringBody(plong));
reqEntity.addPart("lat",new StringBody(plat));
httppost.setEntity(reqEntity); //place it here....