Android   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了java-如何从AsyncTask类的类中获取JsonArray大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试创建一个类以从URL中检索JsonArray.
此类扩展了AsyncTask以避免在接口上创建多个AsyncTask.

该类在调试器上工作正常,但是我不知道该怎么做才能获取返回对象.谁能帮我?

这是我的课:

public class QueryJsonArray extends AsyncTask<String, Void, Void>{

JSONArray jsonRetorno = null;

@Override
protected Void doInBACkground(String... params) {

    InputStream is = null;
    String result = "";

    try {           

        Log.i(getClass().getName(), params[0]);
        httpClient httpclient = new DefaulthttpClient();
        httpGet httpGet = new httpGet( params[0]);
        httpResponse response = httpclient.execute(httpGet);
        if(response.getStatusLine().getStatusCode()==200){
            httpentity entity = response.getEntity();
            is = entity.getContent();
        }else{

            is = null;
        }


    } catch(Exception E) {

        e.printStackTrace();

    }

    if(is!=null){
        try {           
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"),8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            result = sb.toString();             
        } catch(Exception E) {
            e.printStackTrace();
        }

        try {
            jsonRetorno = new JSONArray(result);            
        } catch(JSONException E) {
            e.printStackTrace();

        }

    }
    return null;
      }
         }

我想这样检索:

QueryJsonArray obj = new QueryJsonArray();
JSONArray jArray = obj.execute(myUrl);

提前致谢.

解决方法:

您需要使用回调.只需添加以下内容

变量:

private CallBACk callBACk;

内接口:

public interface CallBACk{
    public void call(JSONArray array);
}

构造函数

public QueryJsonArray(CallBACk callBACk) {
    this.callBACk = callBACk;
}

此外,将您的类声明更改为:

public class QueryJsonArray extends AsyncTask<Void, Void, JSONArray>

并将doInBACkground的返回类型更改为JSONArray.

在doInBACkground的末尾,添加

return jsonRetorno;

最后,添加以下内容方法

public void onPostExecute(JSONArray array) {
    callBACk.call(array);
}

现在,要执行任务,只需执行以下操作:

QueryJsonArray obj = new QueryJsonArray(new CallBACk() {
    public void call(JSONArray array) {
        //TODO: here you can handle the array
    }
});
JSONArray jArray = obj.execute(myUrl);

附带说明一下,您可以使用第三方库(例如droidQuery)来大大简化所有这些操作,它将上述所有代码压缩为:

$.ajax(new AjaxOptions().url(myUrl).success(new Function() {
    public void invoke($d, Object… args) {
        JSONArray array = (JSONArray) args[0];
        //TODO handle the json array.
    }
});

大佬总结

以上是大佬教程为你收集整理的java-如何从AsyncTask类的类中获取JsonArray全部内容,希望文章能够帮你解决java-如何从AsyncTask类的类中获取JsonArray所遇到的程序开发问题。

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

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