2017-05-04 16 views
0

多くのWebサービス(JSON)から同時にデータを取得できるフラグメントを開発中です。のは、このイメージを想像してみましょう: demo imageAndroid - 同じ時間に多くのWebサービス(JSON)からデータを取得する

  • リクエストデータ(このメソッドはJSONをダウンロードする機能を呼び出し、コールバックリスナーを経由して応答を送信します
> @Override 
    public void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     BaseDataReponsitory baseDataReponsitory = new BaseDataReponsitory(); 
     baseDataReponsitory.getDataFromURL(url1, this); 
     baseDataReponsitory.getDataFromURL(url2, this); 
    } 
  • データを受信:
@Override 
    public void loadListFromURLFinish(String json) { 
     ListEntity listEntity = gson.fromJson(json, ListEntity.class); 
     mList.addAll(listEntity.getEntityList()); 
     Log.d(TAG, "loadListFromURLFinish: " + mList.size()); 
    } 

データログは4と9です。それは正しいです(JSON 1には4要素、JSON 2には9要素があります)。 私の質問は、データを分割してビューに設定する方法です(上記の画像を参照)。

答えて

0

コールを区別するためにコールバックにセカンダリパラメータを追加することができます。

public static final int CODE_1 = 1; 
public static final int CODE_2 = 2; 
@Override 
    public void loadListFromURLFinish(String json, int requestCode) { 
     if(requestCode == CODE_1) // do stuff 
     else if(requestCode == CODE_2) // do other stuff 
    } 

そして、あなたはこの

@Override 
    public void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     BaseDataReponsitory baseDataReponsitory = new BaseDataReponsitory(); 
     baseDataReponsitory.getDataFromURL(url1, this, CODE_1); 
     baseDataReponsitory.getDataFromURL(url2, this, CODE_2); 
    } 

のようにそれを呼び出すことでしょうそして、あなたはコールバックを呼び出すときに区別することができますので、あなたはそれでCODE_X変数を渡します。

+0

解決していただきありがとうございます。私はこれについて別の問題があります。データを受け取るときに非同期タスクを使用する必要がありますか?私はそれを見た前にデータログが数秒遅れていることに気付きました。 –

+0

@Brascelok 'AsyncTask'は必ずしも必要ではありませんが、'非ui-thread'でネットワークコールを行う必要があり、 'AsyncTask'がそれを行います。 –

+0

json文字列をダウンロードするときに、関数baseDataReponsitory.getDataFromURLでAsyncTaskを使用しました。 –

関連する問題