我怎么能从AsyncTask传递一个http请求的结果



我是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)之类的东西。

相关内容

  • 没有找到相关文章

最新更新