繁体   English   中英

Volley回调以返回ArrayList,然后将其发送到RecyclerView.Adapter

[英]Volley callback to return a ArrayList and then send it to a RecyclerView.Adapter

我有一个用于RecyclerViewAdapter ,我的Adapter期望两个参数一个是Context ,第二个是ArrayList

我的MainActivity上的ArrayList看起来像这样。 当方法onSucces完成时,我无法返回ArrayList。

ArrayList<Doc> docs = new ArrayList<> ();
public ArrayList<Doc>  getDocumentFromServer() {
    GetDocsFromServer.getAllDocs(getActivity(), new GetDocsFromServer.VolleyCallBackDocs(){
        @Override
        public void onSuccess(ArrayList<String> documentos) {
            docs = new ArrayList<> ();
            for (int i = 0; i < documentos.size(); i++) {
                Doc item = new Doc ();
                item.setTittle("list item" + i);
                item.setDescription("DESCRIPTION");
                item.setPosition (i);
                docs.add(item);
            }

        }
        @Override
        public void onFail(String msg) {

        }
    });
    return docs;
}

当我在onCreateView (这是一个Fragment )上声明MyAdapter时,似乎是这样的。

MyAdapter adapter = new MyAdapter(getActivity(), getDocumentFromServer());

现在,我使用Volley从数据库中获取所有数据,并将所有这些信息设置为ArrayList

public class GetOficiosFromServer{
public static void getAllWorks(final Context context, final VolleyCallBack callBack) {
    RequestQueue rq = Volley.newRequestQueue(context);

    StringRequest strReq = new StringRequest(Request.Method.GET, AppConfig.URL_GET_WORKS, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            try {
                JSONArray jsonArray =  new JSONArray(response);
                ArrayList<String> oficios = new ArrayList<>();
                for(int i=0; i< jsonArray.length(); i++) {
                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                    String name = jsonObject.getString("nombre");
                    oficios.add(name);
                }
                callBack.onSuccess(oficios);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
        }
    });
    rq.add(strReq);
}
public interface VolleyCallBack{
    void onSuccess(ArrayList<String>oficios);
    void onFail(String msg);
}

我如何将这个ArrayList<String>传递给我的Adapter

ArrayList<String>作为参数编写一个构造函数。 像这样

public class MyAdapter extends ArrayAdapter<String>{

    Context ctx;
    ArrayList<Doc> docs;
    ArrayList<String> officios;

    public MyAdapter(Context c,ArrayList<Doc> documents, ArrayList<String> offs){
      this.ctx = c;
      this.docs = documents;
      this.officios = offs
    }
}

您可以在适配器初始化中传递ArrayList<String>

MyAdapter adapter = new MyAdapter(getActivity(), getDocumentFromServer(),<Your_array_list_here>);

暂无
暂无

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

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