【问题标题】:android How to asynchronous request data and synchronous display dataandroid如何异步请求数据和同步显示数据
【发布时间】:2014-07-16 07:28:50
【问题描述】:

我的活动中有两个列表视图。我用了两次asynhttpclient请求数据,但是不知道怎么监控两次请求刷新我的listview。

有一些代码。

loadData( Constant.newGameUrl ,"new");
loadData( Constant.hotGameUrl ,"hot");


/**
 * request data
 * @param url 
 * @param type 
 */
public void loadData( String url, 
        final String type,final int initpage){

    H5RestClient.request(url, null, new OnRequestListener(){

        @SuppressLint("ShowToast")
        @Override
        public void onRequestFinish(boolean ret, String data) {
            // TODO Auto-generated method stub

            List<Game> games = new ArrayList<Game>();
            if( ret == true ){

                try {
                    games = JsonParseUtil.parseGame(data);
                } catch (JSONException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }

                if( games != null ){
                    netStateView.show(NetState.CONTENT);
                    if( type.equals("new")){

                        listNew.addAll(games);

                        newAdapter.notifyDataSetChanged();//this listview

                    }else if( type.equals("hot") ){
                        listHot.addAll(games);

                        hotAdapter.notifyDataSetChanged();//I want to display the two list view


                    }

                }
                else{

                    Toast.makeText(context, "result is null", Toast.LENGTH_SHORT).show();

                }


            }else{
                Toast.makeText(context, "request is failed", Toast.LENGTH_SHORT).show();
            }

        }

    });

}

public static void request(final String url, final RequestParams params, final OnRequestListener listener) {

    AsyncHttpResponseHandler handler = new AsyncHttpResponseHandler(){
        @Override
        public void onSuccess(int statusCode, String responseBody){

            Log.i(TAG, "success  "+responseBody);
            listener.onRequestFinish(true, responseBody);

        }

        @Override
        public void onFailure(Throwable e, String responseBody){

            Log.e(TAG, "fail  "+responseBody);

            listener.onRequestFinish(false, responseBody + "");

        }
    };


    client.get(url, handler);

}

如何同时显示两个listview?

newAdapter.notifyDataSetChanged();//这个列表视图 hotAdapter.notifyDataSetChanged();//我要显示两个列表视图

【问题讨论】:

  • AsyncHttpClient for Android 有一个onSuccess-方法,一旦请求完成就会返回你的响应。常规的AsyncTasks 有一个onPostExecute-方法。
  • 我知道 onSuccess 方法。我想同时显示两个listview,但返回的数据时间不同。
  • 然后您将不得不发布一些代码并向我们展示您已经尝试过什么,您的具体问题是什么。

标签: android


【解决方案1】:

我建议您使用 Google Volley 库进行 HTTP 请求。

在此处查看文档:http://developer.android.com/training/volley/index.html

一些代码解决你的问题:

StringRequest strRequest1 = new StringRequest(url, new Response.Listener<String>() {

    @Override
    public void onResponse(String response) {
         // CODE REQUEST 1

    }
}, 0, 0, null, null);

StringRequest strRequest2 = new StringRequest(url, new Response.Listener<String>() {

    @Override
    public void onResponse(String response) {
         // CODE REQUEST 2

    }
}, 0, 0, null, null);

RequestQueue rq = Volley.newRequestQueue(this);
rq.add(strRequest1);
rq.add(strRequest2);

【讨论】:

  • 非常感谢。我想这就是我想要的。我会试试看。
【解决方案2】:

两个布尔值,每个事务一个。事务完成后,它会检查两个布尔值。如果两者都为真,则显示您的数据,否则仅将其布尔值设置为真...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 2011-05-02
    相关资源
    最近更新 更多