0

我正在制作一个 Android 应用程序,我需要制作一个 JSONObjectRequest 以从github 存储库中的 a获取参数 ( logo) 。package.json

这是我发出 JSON 请求的方法

public void askLogoPath(String url) {

    JsonObjectRequest req = new JsonObjectRequest(url,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        if (response.has("logo"))
                           Global.getInstance().setLogo(response.getString("logo"));
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
        }
    });

    // Adding request to request queue
    QueueController.getInstance().addToRequestQueue(req);

}

logo在类中定义了一个遵循单例模式的变量 ( ) Global,因此我可以在程序中的任何地方访问它。发出此请求后,我想设置一个值为 logo 的变量。

这是我调用前一个函数的一段代码。

if (full_name != null) {
        String url = "https://raw.githubusercontent.com/" + full_name + "/master/";
        this.askLogoPath(url + "package.json");
        this.setLogoPath(Global.getInstance().getLogo());
}

我注意到该onResponse部分是最后一个要执行的部分,所以当我做的时候setLogoPath(Global.getInstance.getLogo())logo 仍然是空的,所以我不能logoPath在上一行中设置。我想等到它被执行,所以它不会为空。

有什么办法让它同步,所以我可以做到这一点?

非常感谢你

4

3 回答 3

0

由于您想同步执行此操作,您可以使用线程锁定进程直到完成

new Thread(new Runnable() {
        @Override
        public void run() {
            //set your logo
        }
    }).start();

如果您不介意异步执行此操作,请使用 AsyncTask。网上有很多例子

于 2016-05-06T13:26:56.513 回答
0

你可以调用这行代码:

this.setLogoPath(Global.getInstance().getLogo());

根据您的AsyncTask的响应。因此,您可以在AsyncTask的onComplete()中执行此功能。

于 2016-05-06T13:29:31.917 回答
0

通过添加回调解决了它。当JSON请求收到响应时,它会调用onSuccess()回调函数的方法,而在主函数中,其余代码都在这个onSuccess()方法中。

于 2016-05-16T15:58:31.900 回答