gpt4 book ai didi

java - 如何从 AsyncTask 传回 http 请求的结果?

转载 作者:可可西里 更新时间:2023-11-01 16:34:22 26 4
gpt4 key购买 nike

我是 Android 和 Java 的初学者。到目前为止还不错,但我偶然发现了一个我无法解决的问题。

我正在尝试在我的应用程序类中创建一个方法,该方法将使用传递给它的值对列表进行 http 调用。这是第一部分。这是在通过单击按钮激活的 Activity 中。

  // 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;
}

我正在尝试获取网络服务器发回的响应,一直返回到调用此过程的 Activity 页面。所以理想情况下,我只想加载值对进行调用并取回 http 响应,然后继续我的快乐方式。

我该怎么做?

最佳答案

您可以直接从 AsyncTask 本身使用在主 UI 线程上下载的 String。只需覆盖 AsyncTask 类中的 protected void onPostExecute(String result) 并在那里完成工作。无论您从 doInBackground() 返回什么值,都会调用此函数。

基本上,下一步是在 onPostExecute() 中执行任何操作。参见 How to get the result of OnPostExecute() to main activity because AsyncTask is a separate class?一些想法:

  • AsyncTask 类作为内部类嵌套在您的 Activity 中,以便它可以与您的 Activity 的变量、方法等一起使用。

    <
  • 创建您的 Activity 实现的接口(interface)。基本上,该任务会在 Activity 中调用类似 onHttpTaskComplete(String result) 的方法。

关于java - 如何从 AsyncTask 传回 http 请求的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13999222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com