简体   繁体   English

具有全局arrayList的Android AsyncHttpClient onSuccess()

[英]Android AsyncHttpClient onSuccess() with global arrayList

I have a global arrayList which I am using for showing android cardViews 我有一个用于显示android cardViews的全局arrayList

ArrayList<Transaction> listTransactions;

When using listTransactions.add inside onSuccess of AsyncHttpClient it works fine, but out of onSuccess function (inside initializeAdapter) the listTransactions becomes empty 在AsyncHttpClient的onSuccess内使用listTransactions.add时,它可以正常工作,但在onSuccess函数(在initializeAdapter内)之外,listTransactions变为空

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

There is no exception or errors. 没有异常或错误。

Also When I try to add it manually before the initializeAdapter(), it shows the manually added card fine 另外,当我尝试在initializeAdapter()之前手动添加时,它会显示手动添加的卡的罚款

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

The onSuccess is not yet executed when you call initializeAdapter(), because it is asynchronous. 调用initializeAdapter()时,onSuccess尚未执行,因为它是异步的。 You should initialize your adapter onSuccess or notifyDataSetChanged() after adding the elements in the ArrayList. 在ArrayList中添加元素之后,应该初始化适配器onSuccess或notifyDataSetChanged()。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM