首页 > 解决方案 > 创建一个队列以从 Android 向 PHP 服务器发送数据

问题描述

在那里,我从 SQLite 获取数据并使用 Volley 将其发送到服务器。现在,我一次发送所有数据。我只想知道如何创建一个队列,该队列首先获取一辆车的数据,获取其响应,然后再发送另一辆车。

cursor=helperClass.readAllData();
                if (cursor!=null)
                {
                    while (cursor.moveToNext())
                    {
                        modelClass=new ModelClass(cursor.getInt(0),cursor.getString(1),
                                cursor.getString(2),cursor.getString(3),
                                cursor.getString(4),cursor.getString(5));
                                modelClasses.add(modelClass);
                    }

                    sizeOfArray=modelClasses.size();

                    for (int i=0; i<sizeOfArray;i++)
                    {
                        name = modelClasses.get(i).getName();
                        model=modelClasses.get(i).getModelName();
                        number=modelClasses.get(i).getEngineNumber();
                        image=modelClasses.get(i).getImageBase64();
                        hdimage=modelClasses.get(i).getHdimageBase64();
                        uploadData(name, model, number, image, hdimage);
                        Toast.makeText(UploadDataServiceClass.this, String.valueOf(sizeOfArray), Toast.LENGTH_SHORT).show();
                        Toast.makeText(UploadDataServiceClass.this, String.valueOf(i), Toast.LENGTH_SHORT).show();
                    }

                }

上传数据(名称、型号、编号、图像、高清图像)

        RequestQueue requestQueue=Volley.newRequestQueue(UploadDataServiceClass.this);
    StringRequest stringRequest=new StringRequest(Request.Method.POST, showURL, new Response.Listener<String>()
    {
        @Override
        public void onResponse(String response)
        {
            try
            {
                Log.d(TAG, "onResponse: " + response);
                JSONObject jsonObject = new JSONObject(response);

            }
            catch (JSONException e)
            {
                e.printStackTrace();                   
            }
        }
    }, new Response.ErrorListener()
    {
        @Override
        public void onErrorResponse(VolleyError error)
        {   }
    }
    )
    {
        @Override
        protected Map<String, String> getParams()
        {
            Map<String, String> parameters = new HashMap<String, String>();
            parameters.put("name", name);
            parameters.put("model", model);
            parameters.put("number", number);
            parameters.put("image", image);
            parameters.put("hdimage", hdimage);
            parameters.put("crud_type", "insert");
            return parameters;
        }
    };
    requestQueue.add(stringRequest);

标签: androidandroid-volley

解决方案


您需要一个带有singleThreadExecutor的Executor Service来一一执行您的线程


创建一个使用单个工作线程在无界队列上运行的 Executor。(但请注意,如果该单线程在关闭前的执行过程中因失败而终止,则如果需要执行后续任务,则新线程将取代它。)任务保证按顺序执行,并且不会有多个任务处于活动状态在任何给定时间。与其他等效的 newFixedThreadPool(1) 不同,返回的执行程序保证不可重新配置以使用额外的线程。


但什么是执行服务? 使用 Executor Service,您可以设置最大运行任务(在您的情况下为 1) 这是一个关于 ThreadPool 、 Executors 和 Future的简单教程线程池和执行器服务







推荐阅读