程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了从AsyncTask类返回数据大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决从AsyncTask类返回数据?

开发过程中遇到从AsyncTask类返回数据的问题如何解决?下面主要结合日常开发的经验,给出你关于从AsyncTask类返回数据的解决方法建议,希望对你解决从AsyncTask类返回数据有所启发或帮助;

对我来说,关键是创建一个名为URLWithParams的类或其他类,因为AsyncTask将只允许发送一种类型的输入,并且我需要URL和http请求的参数。

public class URLWithParams {

    public String url;
    public List<nameValuePair> nameValuePairs;

    public URLWithParams()
    {
        nameValuePairs = new ArrayList<nameValuePair>();
    }
}

然后将其发送到JsONClIEnt:

public class JsONClIEnt extends AsyncTask<URLWithParams, VoID, String> {
    private final static String TAG = "JsONClIEnt";

    ProgressDialog progressDialog ;
    GetJsONListener getJsONListener;
    public JsONClIEnt(GetJsONListener Listener){
        this.getJsONListener = Listener;
    }

    @OverrIDe
    protected String doInBackground(URLWithParams... urls) {
        return connect(urls[0].url, urls[0].nameValuePairs);
    }

    public static String connect(String url, List<nameValuePair> pairs)
    {
        httpClIEnt httpclIEnt = new DefaulthttpClIEnt();

        if(url == null)
        {
            Log.d(TAG, "want to connect, but url is null");
        }
        else
        {
            Log.d(TAG, "starting connect with url " + url);
        }

        if(pairs == null)
        {
            Log.d(TAG, "want to connect, though pairs is null");
        }
        else
        {
            Log.d(TAG, "starting connect with this many pairs: " + pairs.size());
            for(nameValuePair dog : pairs)
            {
                Log.d(TAG, "example: " + dog.toString());
            }
        }

        // Execute the request
        httpResponse response;
        try {
            // Prepare a request object
            httpPost httpPost = new httpPost(url); 
            httpPost.setEntity(new UrlEncodedFormEntity(pairs));
            response = httpclIEnt.execute(httpPost);
            // examine the response status
            Log.i(TAG,response.getStatusline().toString());

            BufferedReader reader = new BufferedReader(new inputStreamReader(response.getEntity().getContent(), "UTF-8"));
            String Json = reader.readline();
            return Json;

        } catch (ClIEntProtocolException e) {
            // Todo auto-generated catch block
            e.printstacktrace();
        } catch (IOException e) {
            // Todo auto-generated catch block
            e.printstacktrace();
        }

        return null;
    }



    @OverrIDe
    protected voID onPostExecute(String Json ) {
        getJsONListener.onRemoteCallComplete(Json);
    }


    public interface GetJsONListener {
        public voID onRemoteCallComplete(String JsonFromNet);
    }

}

然后从我的主班这样叫

public class BookCatalog implements GetJsONListener {
    private final String TAG = this.getClass().getSimplename();

    private String catalog_url = "URL";

    private voID getCatalogFromServer() {

        URLWithParams mURLWithParams = new URLWithParams();
        mURLWithParams.url = catalog_url;

        try {
            JsONClIEnt asyncPoster = new JsONClIEnt(this);
            asyncPoster.execute(mURLWithParams);
        } catch (Exception e) {
            // Todo auto-generated catch block
            e.printstacktrace();
        }
    }

    @OverrIDe
    public voID onRemoteCallComplete(String JsonBookCatalogList) {

        Log.d(TAG, "received Json catalog:");
        Log.d(TAG, JsonBookCatalogList);
    JsONObject bookCatalogResult;
    try {
        bookCatalogResult = (JsONObject) new JsONTokener(JsonBookCatalogList).nextValue();
        JsONArray books = bookCatalogResult.getJsONArray("books");

        if(books != null) {
            ArrayList<String> newBookOrdering = new ArrayList<String>();
            int num_books = books.length();
            BookCatalogEntry temp;

            DeBUGLog.d(TAG, "apparently we found " + Integer.toString(num_books) + " books.");
            for(int book_ID = 0; book_ID < num_books; book_ID++) {
                JsONObject book = books.getJsONObject(book_ID);
                String Title = book.getString("Title");
                int version = book.getInt("price");
            }
        }

    } catch (JsONException e) {
        e.printstacktrace();
    }

    }


}

解决方法

如何从AsyncTask中获取数据?我的MainActivity正在调用触发AsyncTask的DataCall.getJSON函数,但是我不确定如何将数据返回到原始Activity。

调用DataCall的MainActivity应该返回一个字符串并将其保存在state_data

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

数据通话:

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

    }

}

大佬总结

以上是大佬教程为你收集整理的从AsyncTask类返回数据全部内容,希望文章能够帮你解决从AsyncTask类返回数据所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: