Rob*_*ert 9 java google-app-engine android http-post
我正在开发一个Android程序,它通过POST与App Engine程序共享数据,所有这些都在java中.当我使用MultipartEntity POST时,appengine程序由于某些我无法弄清楚的原因而无法看到我的任何POST变量!
Appengine代码:
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
resp.setContentType("text/plain");
resp.getWriter().println("Output:");
String mRoutine = req.getParameter("Routine");
resp.getWriter().println("Routine: " + mRoutine);
String mPMode = req.getParameter("PMode");
resp.getWriter().println("PMode: " + mPMode);
}
Run Code Online (Sandbox Code Playgroud)
使用Android代码段:
HttpPost post = new HttpPost("http://XXX.appspot.com/Echo");
HttpClient client = new DefaultHttpClient();
post.setEntity(new UrlEncodedFormEntity(data,HTTP.UTF_8));
HttpResponse response = client.execute(post);
HttpEntity resmarkMessagesReadFrom = response.getEntity();
if (resmarkMessagesReadFrom != null) {
Result_STR= "Response:\n" + EntityUtils.toString(resmarkMessagesReadFrom);
mMSGBox.setText(Result_STR);
}
Run Code Online (Sandbox Code Playgroud)
失败的Android代码段:
HttpPost post = new HttpPost("http://XXX.appspot.com/Echo");
HttpClient client = new DefaultHttpClient();
MultipartEntity reqmarkMessagesReadFrom = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
try {
reqmarkMessagesReadFrom.addPart("Routine", new StringBody("Neutral"));
post.setEntity(reqmarkMessagesReadFrom);
HttpResponse response = client.execute(post);
HttpEntity resmarkMessagesReadFrom = response.getEntity();
if (resmarkMessagesReadFrom != null) {
Result_STR= "Response:\n" + EntityUtils.toString(resmarkMessagesReadFrom);
mMSGBox.setText(Result_STR);
}
Run Code Online (Sandbox Code Playgroud)
使用MultipartEntity客户端上的类,您需要以不同的方式处理服务器端,使用Apache Commons FileUploaddoPost等 API 读取文件/参数。
Google App Engine 不允许写入文件系统,因此您需要使用 Streaming API。
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import java.io.InputStream;
..
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
try {
ServletFileUpload upload = new ServletFileUpload();
res.setContentType("text/plain");
FileItemIterator iterator = upload.getItemIterator(req);
while (iterator.hasNext()) {
String name = item.getFieldName();
FileItemStream item = iterator.next();
InputStream stream = item.openStream();
if (item.isFormField()) {
resp.getWriter().println((name + " : " + Streams.asString(stream));
}
}
} catch (Exception ex) {
throw new ServletException(ex);
}
}
Run Code Online (Sandbox Code Playgroud)