我是Android和Java的初学者。到目前为止还不错,但我偶然发现了一个问题,我无法理解。
我试图在我的应用程序类中创建一个方法,该方法将使用传递给它的值对列表进行http调用。这是第一部分。这是在一个通过点击按钮激活的活动中。
// Add your data to array
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("action", "2"));
nameValuePairs.add(new BasicNameValuePair("cell", "2500270025"));
nameValuePairs.add(new BasicNameValuePair("date", "blah"));
nameValuePairs.add(new BasicNameValuePair("time", "AndDev is Cool!"));
nameValuePairs.add(new BasicNameValuePair("reason", "2"));
// need to call the request
String result = ((RespondApp) getApplication()).makeHTTPCall(nameValuePairs);
进入应用程序后,这里是接收部分。
public String makeHTTPCall(List<NameValuePair> nameValuePairs) {
// this will be used to make all http requests from the whole app
new postToHttp().execute(nameValuePairs);
return null;
}
这是AsyncTask部分。
class postToHttp extends AsyncTask<List<NameValuePair>, Void, String> {
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
// I am sure I need something here just don't know what
}
@Override
protected String doInBackground(List<NameValuePair>... params) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.evfd.ca/cell.php");
try {
httppost.setEntity(new UrlEncodedFormEntity(params[0]));
Log.i("makeHttpCall", "done ecoding");
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream instream = entity.getContent();
String result = convertStreamToString(instream);
Log.i("Read from server", result);
return result;
}
} catch (ClientProtocolException e) {
return null;
} catch (IOException e) {
return null;
}
return null;
}
我正试图将web服务器发送回的响应一直返回到调用此过程的活动页面。因此,理想情况下,我只想加载值对,进行调用并获得http响应,然后继续我的快乐之路。
我该怎么做?
您可以直接从AsyncTask
本身在主UI线程上下载String
。只需在AsyncTask
类中覆盖protected void onPostExecute(String result)
并在那里完成工作。无论您从doInBackground()
返回什么值,都将调用该函数。
基本上,执行onPostExecute()
内部的下一步操作。参见如何获得OnPostExecute()的结果,以主要活动,因为AsyncTask是一个单独的类?对于一些想法:
-
嵌套的
AsyncTask
类作为一个内部类在你的Activity
,所以它可以与你的活动的变量,方法等工作 -
创建您的Activity实现的
interface
。基本上,任务将调用活动中的onHttpTaskComplete(String result)
之类的东西。