hcg_21 2012-10-19 03:42 采纳率: 0%
浏览 6022
已采纳

从AsyncTask中获取数据的问题

MainActivity调用 DataCall.getJSON方法,然后触发AsyncTask。但是我不确定如何将数据返回到原始的Activity。如何从AsyncTask中获取数据?
MainActivity调用 DataCall,应该返回一个字符串并将其保存在state_data。

String state_data =  DataCall.getJSON(spinnerURL,spinnerContentType);

DataCall:

public class DataCall extends Activity {
    private static final String TAG = "MyApp";


    private class DownloadWebPageTask extends AsyncTask<String, Void, String> {


        protected String doInBackground(String... urls) {
            String response = "";
            for (String url : urls) {
                DefaultHttpClient client = new DefaultHttpClient();
                HttpGet httpGet = new HttpGet(url);
                try {
                    HttpResponse execute = client.execute(httpGet);
                    InputStream content = execute.getEntity().getContent();

                    BufferedReader buffer = new BufferedReader(
                            new InputStreamReader(content));
                    String s = "";
                    while ((s = buffer.readLine()) != null) {
                        response += s;
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return response;
        }


        protected void onPostExecute(String result) {
            //THIS IS WHERE I NEED TO RETURN MY DATA TO THE MAIN ACTIVITY. (I am guessing)
        }

        }

    public void getJSON(String myUrlString, String contentType) {
        DownloadWebPageTask task = new DownloadWebPageTask();
        task.execute(new String[] { "http://www.mywebsite.com/" + myUrlString });

    }

}
  • 写回答

1条回答

  • Baby_Bonnie 2012-10-24 08:35
    关注

    修改AsyncTask:

    public class GetData extends AsyncTask<String, Void, String> 
    { 
        DataDownloadListener dataDownloadListener; 
        public GetData() 
        { 
    
        } 
        public void setDataDownloadListener(DataDownloadListener dataDownloadListener) { 
            this.dataDownloadListener = dataDownloadListener; 
        } 
        @Override 
        protected Object doInBackground(Object... param)  
        { 
    
            return null; 
        } 
        @Override 
        protected void onPostExecute(Object results) 
        {        
            if(results != null) 
            {                
            dataDownloadListener.dataDownloadedSuccessfully(results); 
            } 
            else 
            dataDownloadListener.dataDownloadFailed(); 
        } 
        public static interface DataDownloadListener { 
            void dataDownloadedSuccessfully(Object data); 
            void dataDownloadFailed(); 
        } 
    }
    

    在Activity中使用:

    GetData getdata = new GetData(); 
    getdata.setDataDownloadListener(new DataDownloadListener() 
    { 
        @SuppressWarnings("unchecked") 
        @Override 
        public void dataDownloadedSuccessfully(Object data) { 
    
        } 
        @Override 
        public void dataDownloadFailed() { 
    
        } 
    }); 
    getdata.execute(""); 
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题