java Android改造循环请求不执行回调
我对安卓 studio和改装库以及它处理数据的方式有意见
我有一个简单的操作流程,我想:
- 从服务器上的数据库请求单个项目(获取请求)
- 等待回调以确认应用程序已收到该回调
- 添加另一个请求(循环)
- 发送所有数据时停止添加请求
我遇到的问题是,在发送所有请求之前,获取结果的onResponse回调不会运行。那么所有的回答都是错误的。(如果我调用单个项目(数据库中的1个项目)),则回调运行正常
如何强制它发送一个请求,并在发送另一个请求之前等待该响应
循环代码
private void Pull_data_loop(int total_entries){
//int current_data_point = 0;
boolean datum_processing = false;
for (int i = 1; i <= total_entries; i++) {
Add_single_datam(i);//Call until all entries are fetched from the server
}
}
获取代码-未运行回调需要等待此回调,然后再发送下一个请求
private void Add_single_datam(int id)
{
HashMap<String, String> map = new HashMap<>();
map.put("Id_request", Integer.toString(id));//The ID value
Call<Fetch_result> call = retrofitInterface.executeGet_data(map);//Run the post
call.enqueue(new Callback<Fetch_result>() {
@Override
public void onResponse(Call<Fetch_result> call, Response<Fetch_result> response) {
if (response.code() == 200)//Successful login
{
D1= response.body().getD1_String();
D2= response.body().getD2_String();
boolean result = BLE_DB.addData_Downloaded(D1, D2);//Add data
if (result == true) {
Log.d(TAG, "data_changes: Added data correctly");
}
if (result == false) {
Log.d(TAG, "data_changes: did not add data correctly");
}//false
} else if (response.code() == 404) {
Utils.toast(getApplicationContext(), "Get data fail");//Pass information to the display
}
}
@Override
public void onFailure(Call<Fetch_result> call, Throwable t) {
Utils.toast(getApplicationContext(), "Get data error");
}
});
}
注:
我正在使用NodeJS服务器处理我的请求。我发送Id,它在数据库中返回该Id
# 1 楼答案
您可以向
Add_single_datam
发送一个回调实例,然后在改装响应中,向该回调成功发送。 然后在该回调中,您将使用iteraveli
,您可以查看是否到达了total_entries
的末尾,在i
中添加+1并再次发出请求,或者只是停止# 2 楼答案
使用一些线程解决方案,如RxJava、协同程序或AsyncTask。它不遵循规则的原因是因为有两个线程正在分发工作,所以为了让它同步工作,我们必须使用上面提到的一些线程解决方案,并在后台线程上执行这个for循环,使它像一个同步调用一样,获得所有结果,最后使用结果切换回主线程
如果您熟悉AsynTask
现在就这样打电话