繁体   English   中英

具有全局arrayList的Android AsyncHttpClient onSuccess()

[英]Android AsyncHttpClient onSuccess() with global arrayList

我有一个用于显示android cardViews的全局arrayList

ArrayList<Transaction> listTransactions;

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

没有异常或错误。

另外,当我尝试在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();
}

调用initializeAdapter()时,onSuccess尚未执行,因为它是异步的。 在ArrayList中添加元素之后,应该初始化适配器onSuccess或notifyDataSetChanged()。

暂无
暂无

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

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