【问题标题】:Volley callback to return a ArrayList and then send it to a RecyclerView.AdapterVolley 回调返回一个 ArrayList,然后将其发送到 RecyclerView.Adapter
【发布时间】:2017-08-04 02:14:20
【问题描述】:

我有一个Adapter 用于RecyclerView,我的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&lt;String&gt;传递给我的Adapter

【问题讨论】:

    标签: android callback android-recyclerview android-volley


    【解决方案1】:

    编写一个以ArrayList&lt;String&gt;为参数的构造函数。像这样的

    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&lt;String&gt;

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

    【讨论】:

    • 我从我的 MainActivity 更新我的代码,以前的版本是静态的,你安装了 VolleyRequest。当方法 onSucces 完成时,我无法返回 ArrayList。 @SripadRaj
    猜你喜欢
    • 2014-01-11
    • 2021-07-24
    • 2015-07-26
    • 2018-07-21
    • 2017-12-04
    • 2014-08-31
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    相关资源
    最近更新 更多