android - 创建一个队列以从 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);
解决方案
您需要一个带有singleThreadExecutor的Executor Service来一一执行您的线程
创建一个使用单个工作线程在无界队列上运行的 Executor。(但请注意,如果该单线程在关闭前的执行过程中因失败而终止,则如果需要执行后续任务,则新线程将取代它。)任务保证按顺序执行,并且不会有多个任务处于活动状态在任何给定时间。与其他等效的 newFixedThreadPool(1) 不同,返回的执行程序保证不可重新配置以使用额外的线程。
但什么是执行服务?
使用 Executor Service,您可以设置最大运行任务(在您的情况下为 1)
这是一个关于 ThreadPool 、 Executors 和 Future的简单教程
推荐阅读
- sql - 在 SQL 中获取总分钟数的 HH:mm 版本
- python - 构建深度 CNN 时出现 InvalidArgumentError
- javascript - 在烧瓶中发布数据后,无法使用 JSON 数据打开新的 html 页面
- javascript - 有人可以解释一下为什么 alert.length 返回“0”以及为什么 Array.length 或 Object.length 返回 1
- java - JAVA 在用户输入的两个日期之间打印和分隔日期(周末和工作日)
- angular-cli - 如何从观察者文件中排除 node_modules
- plotly-dash - 为什么 plotly 的配置在 dash 中不起作用?
- wordpress - Wordpress 根文件夹内的错误 404 MyBB 文件夹
- docker - Docker-Compose:更新后无法访问服务
- python - 我在哪里可以找到在自然图像上训练的预训练变分自动编码器?