2017-02-12 2 views
0

Ich habe eine globale Arraylist, die ich für die Ansicht android cardViews bin mitAndroid AsyncHttpClient onSuccess() mit globaler Arraylist

ArrayList<Transaction> listTransactions; 

Bei der Verwendung von listTransactions.add innerhalb onSuccess von AsyncHttpClient ihm gut funktioniert, aber aus onSuccess Funktion (innerhalb von initializeAdapter) wird die listTransactions leer

@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... 
    });} 

Es gibt keine Ausnahme oder Fehler.

Auch wenn ich versuche, es manuell hinzufügen vor dem initializeAdapter(), zeigt die manuell hinzugefügt Karte Fein

@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

Sie Defiune 'listTransactions = neue ArrayList <>();' in 'GetTransactions' -Funktion, wie können Sie erwarten, es außerhalb in' initializeAdapter' zu verwenden? –

+0

Ich definierte es global ArrayList listTransactions; Das war die Initialisierung – wkh

+0

: D Entschuldigung, mein Fehler. Ich denke, dass Sie Adapter zuerst einstellen sollten, dann initialisieren Sie Ihr Array. das ist der richtige Weg. –

Antwort

0

Die onSuccess ist noch nicht ausgeführt, wenn Sie initializeAdapter() nennen, weil es asynchron ist. Sie sollten Ihren Adapter onSuccess oder notifyDataSetChanged() initialisieren, nachdem Sie die Elemente in der ArrayList hinzugefügt haben.

+0

Hinzufügen transaction_card. getAdapter(). notifyDataSetChanged() in Ihrem onSuccess nach dem Hinzufügen aller Elemente in der listTransactions ArrayList. –

+0

es funktioniert, wenn ich die Initialisierung in onSuccess hinzugefügt. Danke – wkh

+0

Du bist willkommen;) –

Verwandte Themen