0

私は Android アプリを作成しています。JSONObjectRequest を作成して、github リポジトリ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())ロゴを実行するとまだnullであるためlogoPath、前の行に設定できません。これが実行されるまで待ちたいので、nullにはなりません。

これを行うことができるように同期させる方法はありますか?

どうもありがとうございました

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の応答時。したがって、この関数onComplete()AsyncTaskで実行できます。

于 2016-05-06T13:29:31.917 に答える
0

callbackを追加することで解決しました。リクエストがJSONレスポンスを受け取るonSuccess()と、コールバック関数のメソッドが呼び出されます。メイン関数では、残りのコードはこのonSuccess()メソッド内にあります。

于 2016-05-16T15:58:31.900 に答える