2017-02-12 4 views
0

と私は(それがうまく動作しますが、するonSuccess機能のうち、私はAsyncHttpClientのするonSuccess内listTransactions.addを使用する場合は、アンドロイドcardViewsアンドロイドAsyncHttpClientするonSuccess()グローバルArrayListの

ArrayList<Transaction> listTransactions; 

を示すために使用していますグローバルのArrayListを持っています内部initializeAdapter)、リストトランザクションは空になります

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    getTransactions(); 
    initializeAdapter(); 
} 

private void initializeAdapter(){ 
    Transaction_Adapter adapter = new Transaction_Adapter(listTransactions); 
    transaction_card.setAdapter(adapter); 
    LinearLayoutManager llm = new LinearLayoutManager(getContext()); 
    transaction_card.setLayoutManager(llm); 
    transaction_card.setHasFixedSize(true); 
    DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(transaction_card.getContext(),1); 
    transaction_card.addItemDecoration(dividerItemDecoration); 
} 

public void getTransactions() { 
    listTransactions=new ArrayList<>(); 
    AsyncHttpClient client = new AsyncHttpClient(); 
    client.get(ip,params ,new AsyncHttpResponseHandler() { 

     @Override 
     public void onSuccess(String response) { 
      try { 
       JSONObject obj = new JSONObject(response); 
       if(obj.getBoolean("status")){ 
        int count = obj.getInt("count"); 
        for(int i=0;i<count;i++) { 
         JSONObject o = obj.getJSONObject("Transaction_" + i); 
         listTransactions.add(new Transaction(o.getInt("Sender"),o.getInt("Receiver"),o.getDouble("Amount"),o.getString("Date"),o.getString("Type"))); 
        } 
        //testing 
        for(Transaction t:listTransactions){ 
         Log.e("transaction",String.valueOf(t.type)); //this shows the type of all transactions correctly 
        } 
       } 
      . 
      . 
      . 
      } 
     }//catch & onFailure... 
    });} 

例外またはエラーはありません。それは非同期であるため、

はまた、私はinitializeAdapter()の前に手動で追加しようとすると、それは、あなたがinitializeAdapterを(呼び出すときにするonSuccessがまだ実行されていない

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    getTransactions(); 
    listTransactions.add(new Transaction(1,2,111,"01-12-2016 12:15","test")); //manually added card 
    initializeAdapter(); 
} 
+0

'getTransactions'関数で' listTransactions = new ArrayList <>(); 'を打ち明けましたが、' initializeAdapter'でそれをどのように使用することができますか? –

+0

グローバルArrayListを定義しました listTransactions; 初期化は – wkh

+0

でした:D申し訳ありませんが、私の間違いです。私はあなたが最初にアダプタを設定して、あなたの配列を初期化する必要がありますと思う。それは正しい方法です。 –

答えて

0

細かい手動で追加カード)を示しています。 ArrayList内の要素を追加した後、アダプタonSuccessまたはnotifyDataSetChanged()を初期化する必要があります。

+0

transaction_cardを追加してください。 listTransactions ArrayList内のすべての要素を追加した後、onSuccessのgetAdapter()。notifyDataSetChanged()を呼び出します。 –

+0

これはonSuccess内で初期化を追加したときに機能します。 ありがとう – wkh

+0

あなたはうまくいます;) –

関連する問題