每次击中api时都会显示响应

Luf*_*ffy 5 android android-volley

我需要根据数组列表大小得到响应8次(动态).所以我用过loop.inside for for循环,我正在使用volley get response.

在每次点击api时,我需要获得onResponse.

下面我发布了logcat及相关代码:

Logcat :(已 编辑)

 E/getAvaArrStr: 
 E/urlAva: 

 E/getAvaArrStr: 
 E/urlAva: 

 E/getAvaArrStr: 
 E/urlAva: 

 E/getAvaArrStr: 
 E/urlAva: 

 E/getAvaArrStr: 
 E/urlAva:

 /* Response */

 E/ResponseAvatar: 
 E/url: 
 E/CheckArrBit: 

 E/ResponseAvatar: 
 E/url: 
 E/CheckArrBit: 

 E/ResponseAvatar: 
 E/url: 
 E/CheckArrBit: 

 E/ResponseAvatar: 
 E/url: 
 E/CheckArrBit: 
Run Code Online (Sandbox Code Playgroud)

CardsFragment.java :(已编辑)

RequestQueue queue = Volley.newRequestQueue(getActivity());

for (int i = 0; i < alAvaArr.size(); i++) {

    getAvaArrStr = alAvaArr.get(i);

    Log.e("getAvaArrStr", "" + getAvaArrStr);

    urlAva = BurblrUtils.BR_AVATAR_IMAGE + getAvaArrStr + "&android=1";

    Log.e("urlAva", urlAva);


    requestAva = new StringRequest(Request.Method.GET, urlAva, new Response.Listener<String>() {

        @Override
        public void onResponse(String response) {
            if (response != null && !response.startsWith("<HTML>")) {
                Log.e("ResponseAvatar", response);

                dialog.dismiss();

                try {

                    Toast.makeText(getActivity(), "Running ", Toast.LENGTH_SHORT).show();

                    String url = response.replace("\\", "");
                    url = url.replace("\"", "");

                    Log.e("url", url);

                    arrBitMap.add(url);

                    Log.e("CheckArrBit", "" + arrBitMap);

                    //     Glide.with(getActivity()).load(url).placeholder(R.drawable.ic_launcher).error(R.drawable.ic_launcher).into(img);


                    getSwipeImage();

                    myAppAdapter.notifyDataSetChanged();

                } catch (Exception e) {
                    e.printStackTrace();
                    dialog.dismiss();
                }

            } else {
                dialog.dismiss();
            }
        }
    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            if (error != null) {
                Log.e("error", error.toString());
                dialog.dismiss();
            }

        }
    }) {
        @Override
        protected Map<String, String> getParams() {
            Map<String, String> params = new HashMap<String, String>();

            params.put("file", getAvaArrStr);

            Log.e("paramsImg", "" + params);

            Log.e("RunningParams", "Testing");


            return params;
        }

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> params = new HashMap<String, String>();
            params.put("Content-Type", "application/x-www-form-urlencoded");
            return params;
        }
    };

       queue.add(requestAva);

        queue.getCache().remove(urlAva);

}
Run Code Online (Sandbox Code Playgroud)

预期的日志响应顺序:

E/getAvaArrStr: -> E/urlAva: -> E/ResponseAvatar: -> E/url: -> E/CheckArrBit:
Run Code Online (Sandbox Code Playgroud)

我需要每次运行循环时得到响应.这意味着近8次,基于arrayList大小,我必须得到响应消息,是否有可能在凌空?任何克服这个问题的建议.

小智 1

您必须创建一个函数。该函数makeRequest处理您的下一个 Api 调用

public class MainActivity extends AppCompatActivity {

    RequestQueue queue;
    int mIndex = 0 ;
    ArrayList<String> alAvaArr;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mQueue = Volley.newRequestQueue(getActivity());
        alAvaArr = ///////// initialize here

        mIndex  = 0;
        makeRequest(alAvaArr.get(mIndex));
    }

    public void makeRequest( String arg){



        getAvaArrStr = arg;

        Log.e("getAvaArrStr", "" + getAvaArrStr);

        urlAva = BurblrUtils.BR_AVATAR_IMAGE + getAvaArrStr + "&android=1";

        Log.e("urlAva", urlAva);


        requestAva = new StringRequest(Request.Method.GET, urlAva, new Response.Listener<String>() {

            @Override
            public void onResponse(String response) {
                if (response != null && !response.startsWith("<HTML>")) {
                    Log.e("ResponseAvatar", response);

                    dialog.dismiss();

                    try {

                        Toast.makeText(getActivity(), "Running ", Toast.LENGTH_SHORT).show();

                        String url = response.replace("\\", "");
                        url = url.replace("\"", "");

                        Log.e("url", url);

                        arrBitMap.add(url);

                        Log.e("CheckArrBit", "" + arrBitMap);

                        //     Glide.with(getActivity()).load(url).placeholder(R.drawable.ic_launcher).error(R.drawable.ic_launcher).into(img);


                        getSwipeImage();

                        myAppAdapter.notifyDataSetChanged();

                        mIndex++;
                        if(mIndex < alAvaArr.size()){
                            makeRequest(alAvaArr.get(mIndex));
                        } 

                    } catch (Exception e) {
                        e.printStackTrace();
                        dialog.dismiss();
                    }

                } else {
                    dialog.dismiss();
                }
            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                if (error != null) {
                    Log.e("error", error.toString());
                    dialog.dismiss();
                }

            }
        }) {
            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<String, String>();

                params.put("file", getAvaArrStr);

                Log.e("paramsImg", "" + params);

                Log.e("RunningParams", "Testing");


                return params;
            }

            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String, String> params = new HashMap<String, String>();
                params.put("Content-Type", "application/x-www-form-urlencoded");
                return params;
            }
        };

        mQueue.add(requestAva);

 }
Run Code Online (Sandbox Code Playgroud)