【问题标题】:Multiple AsyncHttpClient get requests to populate one activity多个 AsyncHttpClient 获取请求以填充一个活动
【发布时间】:2014-05-06 11:33:43
【问题描述】:

我有一个“GameActivity”,为了填充布局,我必须多次调用远程 API,并想知道使用 AsyncHttpClient 包 http://loopj.com/android-async-http/ 完成此操作的最佳方法。

我当前对单个 API 调用的设置:

public class MainActivity extends Activity implements AdapterView.OnItemClickListener, SwipeRefreshLayout.OnRefreshListener{

    ListView mainListView;
    JSONMainAdapter mJSONAdapter;
    SwipeRefreshLayout swipeLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        swipeLayout = (SwipeRefreshLayout) findViewById(R.id.main_swipe_container);
        swipeLayout.setOnRefreshListener(this);
        swipeLayout.setColorScheme(android.R.color.holo_blue_bright,
                android.R.color.holo_green_light,
                android.R.color.holo_orange_light,
                android.R.color.holo_red_light);

        mainListView = (ListView) findViewById(R.id.main_listview);
        mainListView.setOnItemClickListener(this);

        mJSONAdapter = new JSONMainAdapter(this, getLayoutInflater());
        mainListView.setAdapter(mJSONAdapter);

        getGameDetails();
    }

所以我的 getGame Details 将是第一个调用,但随后我需要再调用 4-6 个。

我的游戏详情:

private void getGames() {

        swipeLayout.setRefreshing(true);

        MyRestClient.get("games", null, new JsonHttpResponseHandler() {
            @Override
            public void onSuccess(JSONObject jsonObject) {
                swipeLayout.setRefreshing(false);
                Toast.makeText(getApplicationContext(), "Success!", Toast.LENGTH_LONG).show();
                mJSONAdapter.updateData(jsonObject.optJSONArray("games"));
            }

            @Override
            public void onFailure(int statusCode, Throwable throwable, JSONObject error) {
                swipeLayout.setRefreshing(false);
                Toast.makeText(getApplicationContext(), "Error: " + statusCode + " " + throwable.getMessage(), Toast.LENGTH_LONG).show();
                Log.e("ERROR", statusCode + " " + throwable.getMessage());
            }
        });
    }

所以我的想法是为我需要的每个调用添加一个函数,然后在我的 onCreate 中一个接一个地调用它们,如下所示:

getGameDetails();
getGameCallA();
getGameCallB();
getGameCallC();

另一种方法是调用 AsyncHttpClient 的 onSuccess 方法中的 next 函数,但这似乎不对。

问题:我应该在这里使用 AsyncHttpClient 的“批量请求”吗?

感谢任何意见。

【问题讨论】:

    标签: android android-layout asynchttpclient


    【解决方案1】:

    我无法验证它是否有效,但我想有一种方法可以一个接一个地执行您的请求

    在你的班级MyRestClient:

    private static AsyncHttpClient client = new AsyncHttpClient();
    static {
        client.setThreadPool(Executors.newSingleThreadExecutor());
    }
    

    之后你只需调用:

    getGameDetails();
    getGameCallA();
    getGameCallB();
    getGameCallC();
    

    【讨论】:

    • 我想注意在 onSuccess 方法中调用下一个函数的方式看起来更正确。因为在我的情况下,您将获得按顺序执行的 http 请求,但您无法保证下一个 http 请求的执行速度会比上一个 onSucess 块中的代码慢。此外,如果您的第一个请求返回 onError 怎么办?是否要继续执行下一个请求?
    • 我想得越多我认为你是正确的 - 我将只使用 onSuccess 来调用其他 api 调用。乍一看,这似乎是一种非常线性的非 OO 方法。因此,假设 AsyncHttpClient 中没有隐藏“批处理”请求功能就足够了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    相关资源
    最近更新 更多