gpt4 book ai didi

php - 异常 - 获取请求结果在发布请求 Volley 后未更新

转载 作者:行者123 更新时间:2023-11-29 11:21:03 24 4
gpt4 key购买 nike

我对 android 和 php 的移动开发都很陌生,所以如果我的问题不相关,请放轻松。谢谢。

需求是开发一个同步功能 - 通过单击按钮上传然后下载数据,从 Android 设备的 SQLite 数据库到 Godaddy 平台上的 mysql 服务器。

  • 我开发了 2 个独立的网络服务:1 个用于上传功能,1 个用于 godaddy 服务器上托管的下载功能
  • 我使用了volley的请求api
  • 我开发了一个synchelper类来为android上传和下载功能。

问题- 当通过单独的按钮依次单击来调用上传和下载功能时,上传和下载功能可以正常工作。但是,当我将上传和下载功能集成到一个按钮中时,上传功能可以正常工作,但下载功能不会下载mysql数据库的最新图像,其中包括刚刚上传的数据。

有人能解释一下吗?

这是我的代码:

在syncHelper.java中

    String read_animal_url = "http://www.careagriculture.com/get_all_animals3.php";
String insert_animals_url = "http://www.careagriculture.com/insert_animals25.php";
public void DeviceDataUpload() {

StringRequest postRequest = new StringRequest(Method.POST, insert_animals_url, new Response.Listener<String>() {

@Override
public void onResponse(String response) {
try {
if (!(response == null)) {

JSONObject c = new JSONObject(response);
System.out.print(insert_animals_url + " response " + response.toString());
int success = c.getInt("success");
if (success == 1) {
localDBHelper.deleteAllAnimalFromDevice();

}
}
}catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}){
@Override
public Map<String, String> getParams(){
Map<String, String> params = localDBHelper.getAllAnimalMap();
return params;
}

@Override
public Priority getPriority() {
return Priority.HIGH;
}
};
AppController.getInstance().addToReqQueue(postRequest);
}


public void ServerDataDownload(){

JsonObjectRequest readAnimalReq = new JsonObjectRequest(Method.GET, read_animal_url, new Response.Listener<JSONObject>() {

@Override
public void onResponse(JSONObject response) {
try {
System.out.print(read_animal_url+" response "+response.toString());
int success = response.getInt("success");

if (success == 1) {
JSONArray ja = response.getJSONArray("animal");

localDBHelper.deleteAllAnimalFromServer();

for (int i = 0; i < ja.length(); i++) {

map.put("ANIMAL_ID", c.getString(TAG_ANIMAL_ID));
map.put("SUPERVISOR", c.getString(TAG_SUPERVISOR));
map.put("ANIMAL_TYPE", c.getString(TAG_ANIMAL_TYPE));
map.put("RECORD_TYPE", "S");
if (!c.isNull(TAG_GENDER))
map.put("GENDER", c.getString(TAG_GENDER));
if (!c.isNull(TAG_DATE_OF_BIRTH))
map.put("DATE_OF_BIRTH", c.getString(TAG_DATE_OF_BIRTH));
if (!c.isNull(TAG_DATE_PURCHASED))
map.put("DATE_PURCHASED", c.getString(TAG_DATE_PURCHASED));
if (!c.isNull(TAG_PURCHASE_PRICE))
map.put("PURCHASE_PRICE", c.getString(TAG_PURCHASE_PRICE));
if (!c.isNull(TAG_DATE_DISTRIBUTED))
map.put("DATE_DISTRIBUTED", c.getString(TAG_DATE_DISTRIBUTED));
if (!c.isNull(TAG_DATE_SOLD))
map.put("DATE_SOLD", c.getString(TAG_DATE_SOLD));
if (!c.isNull(TAG_SALE_PRICE))
map.put("SALE_PRICE", c.getString(TAG_SALE_PRICE));

Item_List.add(map);
localDBHelper.insertAnimalFromServer(map);

}
}

} catch (JSONException e) {
e.printStackTrace();
}

}
}, new Response.ErrorListener() {

@Override
public void onErrorResponse(VolleyError error) {
}
}){
@Override
public Priority getPriority() {
return Priority.LOW;
}
};
AppController.getInstance().addToReqQueue(readAnimalReq);
}

在 MainActivity 中,我调用:

syncButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (localDBHelper.getAllAnimalCount()>0) {
SyncHelper syncHelper = new SyncHelper(MainActivity.this);
syncHelper.DeviceDataUpload();
Toast.makeText(getApplicationContext(),"Upload Completed", Toast.LENGTH_LONG).show();
}
syncHelper.ServerDataDownload();
Toast.makeText(getApplicationContext(),"Sync Completed", Toast.LENGTH_LONG).show();
}
});

最佳答案

new Response.Listener<JSONObject>()上传时听起来像是异步的,因此会立即返回到您的点击处理程序事件。

如果您想在上传完成后触发下载,则需要从上传监听器中的 onResponse() 方法调用它。

关于php - 异常 - 获取请求结果在发布请求 Volley 后未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38930820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com