我有一个 android 应用程序,它在 AsyncTask 中向 servlet 发出 2 个 get 请求。 我想检索一个包含简单响应的字符串。 这是我的异步任务:
protected String doInBackground(Void... params) {
return uploadFile();
}
@SuppressWarnings("deprecation")
private String uploadFile() {
String responseString = null;
String responseStr = null;
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(Config.FILE_UPLOAD_URL);
try {
AndroidMultiPartEntity entity = new AndroidMultiPartEntity(
new ProgressListener() {
@Override
public void transferred(long num) {
publishProgress((int) ((num / (float) totalSize) * 100));
}
});
File sourceFile = new File(filePath);
// Adding file data to http body
entity.addPart("image", new FileBody(sourceFile));
totalSize = entity.getContentLength();
httppost.setEntity(entity);
// Making server call
HttpResponse response = httpclient.execute(httppost);
HttpEntity r_entity = response.getEntity();
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) {
// Server response
responseString = EntityUtils.toString(r_entity);
try {
HttpClient client = new DefaultHttpClient();
URI getURL = new URI("http://192.168.1.101:8080/MusaServlet?collection="+collection+"&name="+filename);
Log.i("QUERY",getURL.getQuery());
HttpGet get = new HttpGet(getURL);
HttpResponse responseGet = client.execute(get);
HttpEntity resEntityGet = responseGet.getEntity();
if (resEntityGet != null) {
Log.i("GET RESPONSE",EntityUtils.toString(resEntityGet));
}
responseStr = EntityUtils.toString(responseGet.getEntity());
} catch (Exception e) {
e.printStackTrace();
}
} else {
responseString = "Error occurred! Http Status Code: "
+ statusCode;
}
} catch (ClientProtocolException e) {
responseString = e.toString();
} catch (IOException e) {
responseString = e.toString();
}
return responseStr;
}
Servlet 代码是:
PrintWriter out = response.getWriter();
out.println("HELLO STUPID APP!");
但是应用程序显示的对话框是空的!无话可说! 大家有什么问题吗?
谢谢
最佳答案
首先检查您的 GET 请求状态代码为
responseGet.getStatusLine().getStatusCode();
如果给出数字 200,则 GET 成功。
现在,如果是 200 那么您将通过以下代码收到您发送的响应
HttpEntity resEntityGet = responseGet.getEntity();
然后
String result;
if(resEntityGet !=null ){
result= EntityUtils.toString(resEntityGet);
}
现在最重要的是,一旦您执行 responseGet.getEntity()
,GET 响应的数据将被传递给变量..您分配..并且稍后调用 responseGet.getEntity()
将始终返回空...
这可能是您在对话框中收到空响应的原因
关于java - 使用 Android 检索响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28089391/