Volley中的OnResponse不允许使用ArrayList

时间:2019-02-25 16:16:08

标签: java android json android-volley

我正在使用volley解析一些JSON,在onResponse方法中,我记录了从api返回的数据,并且可以看到一切正常。我还检查了我的回收站视图是否可以正确处理某些虚拟数据。当我尝试将api返回的数据添加到ArrayList时,arraylist返回为空,并且在onResponse中创建的对象都不存在。

public class AllCoinSearch extends AppCompatActivity {

private RequestQueue mQueue;

//    private SearchView searchView;

RecyclerView.LayoutManager mlayoutManager;
RecyclerView.Adapter adapter;
private RecyclerView recyclerView;

private ArrayList<CoinItemChangelly> coinitemList;
ArrayList<String> demoList = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_all_coin_search);

    recyclerView = findViewById(R.id.allSearchCoinsRecyclerView);

    coinitemList = new ArrayList<>();

    getCoins(coinitemList);

    mlayoutManager = new LinearLayoutManager(this);
    adapter = new SearchAdapter(demoList);
    recyclerView.setLayoutManager(mlayoutManager);
    recyclerView.setAdapter(adapter);

}

public void getCoins(ArrayList<CoinItemChangelly> coinitemList) {
    mQueue = Volley.newRequestQueue(this);
    String url = "https://min-api.cryptocompare.com/data/all/coinlist";
    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {

            try {
                JSONObject arr = response.getJSONObject("Data");
                Iterator<String> keys = arr.keys();


                while (keys.hasNext()) {
                    String keyValue = keys.next();
                    String coinName = arr.getJSONObject(keyValue).getString("CoinName");
                    String coinSymbol = arr.getJSONObject(keyValue).getString("Symbol");
                    String coinImage = arr.getJSONObject(keyValue).getString("ImageUrl");
                    coinitemList.add(new CoinItemChangelly(coinSymbol, coinImage, coinName));
//                        Log.i("PRINTING",coinName);
//                        Log.i("PRINTING",coinSymbol);
//                        Log.i("PRINTING",coinImage);
//          
                    }
                } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.i("ERROR: ", "not working");

        }
    });
    mQueue.add(request);
}
}

0 个答案:

没有答案