- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个代码调用 PHP web 服务从 mysql 获取 json 数据。然后使用此 json 响应将 android 设备同步到 sqlite。我为每个表创建了 1 个 php。当我只为一张表执行服务时,一切正常。但是,我创建了一个表名及其要调用的 URL 的映射,当我在循环中调用此服务时,仅针对映射中 10 多个条目中的 1 或 2 个 URL 调用该服务,并且不一致方式,永远不会对所有条目完全起作用。
有什么问题请指点。
public void syncAllFromRemote() {
Toast.makeText(getApplicationContext(), "Synchronizing app...Please Wait...", Toast.LENGTH_SHORT).show();
Map<String, String> urlMap = new LinkedHashMap<String, String>();
urlMap.put("oc_address", "/get_oc_address.php");
urlMap.put("oc_category", "/get_oc_category.php");
urlMap.put("oc_product", "/get_oc_product.php");
urlMap.put("oc_category_description", "/get_oc_category_description.php");
urlMap.put("oc_customer_group", "/get_oc_customer_group.php");
urlMap.put("oc_customer", "/get_oc_customer.php");
urlMap.put("oc_product_description", "/get_oc_product_description.php");
urlMap.put("oc_customer_group_description", "/get_oc_customer_group_description.php");
urlMap.put("oc_product_mapping", "/get_oc_product_mapping.php");
urlMap.put("oc_product_special", "/get_oc_product_special.php");
urlMap.put("oc_product_to_category", "/get_oc_product_to_category.php");
urlMap.put("oc_product_to_customer_group", "/get_oc_product_to_customer_group.php");
urlMap.put("oc_order", "/get_oc_order.php");
for (Map.Entry<String, String> entry : urlMap.entrySet()) {
final String tableName = entry.getKey();
final String url = entry.getValue();
callWebservice(tableName, url);
}
if (syncStatus) {
Toast.makeText(getApplicationContext(), "Synchronization completed successfully", Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(getApplicationContext(), "Synchronization faced some problems", Toast.LENGTH_SHORT).show();
}
updateSyncDetails(syncStatus);
Toast.makeText(getApplicationContext(), "Updated sync details", Toast.LENGTH_SHORT).show();
reloadActivity();
}
private void callWebservice(final String tableName, String url) {
SyncHelper.get(url, null, new AsyncHttpResponseHandler() {
@Override
public void onStart() {
super.onStart();
Log.i("onStart", "OKOKOK");
}
@Override
public void onSuccess(String response) {
super.onSuccess(response);
System.out.println("Calling copy method " + tableName);
copyToSQLite(tableName, response);
Toast.makeText(getApplicationContext(), tableName + " : Success", Toast.LENGTH_LONG).show();
}
@Override
public void onFinish() {
super.onFinish();
Log.i("onFinish", "OKOKOK");
}
@Override
public void onFailure(int statusCode, Throwable error, String content) {
super.onFailure(error, content);
System.out.println("On faliure" + tableName);
syncStatus = false;
if (statusCode == 404) {
Toast.makeText(getApplicationContext(), tableName + " : Requested resource not found",
Toast.LENGTH_LONG).show();
} else if (statusCode == 500) {
Toast.makeText(getApplicationContext(), tableName + " : Something went wrong at server end",
Toast.LENGTH_LONG).show();
} else {
Toast.makeText(
getApplicationContext(),
tableName
+ " : Unexpected Error occcured! [Most common Error: Device might not be connected to Internet]. Status Code : "
+ statusCode, Toast.LENGTH_LONG).show();
}
}
});
}
public void copyToSQLite(String tableName, String response) {
System.out.println("In copy method for : " + tableName);
System.out.println(response);
ArrayList<HashMap<String, String>> syncList;
syncList = new ArrayList<HashMap<String, String>>();
LinkedHashMap<String, LinkedHashMap<String, String>> tablesMap = DBHelper.defineTablesFromMySql();
Gson gson = new GsonBuilder().create();
try {
JSONArray arr = new JSONArray(response);
if (arr.length() != 0) {
System.out.println("JSON Array for " + tableName + " : " + arr);
LinkedHashMap<String, String> tableDetails = tablesMap.get(tableName);
for (int i = 0; i < arr.length(); i++) {
JSONObject obj = (JSONObject) arr.get(i);
queryValues = new HashMap<String, String>();
for (Map.Entry<String, String> entry : tableDetails.entrySet()) {
String key = entry.getKey();
queryValues.put(entry.getKey(), obj.get(entry.getKey()).toString());
}
controller.insertTableFromMySql(tableName, queryValues);
HashMap<String, String> map = new HashMap<String, String>();
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
SyncHelper class
private static final String BASE_URL = "http://10.0.2.2/mysqltosqlitesync";
private static AsyncHttpClient client = new AsyncHttpClient();
public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
client.get(getAbsoluteUrl(url), params, responseHandler);
}
public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
client.post(getAbsoluteUrl(url), params, responseHandler);
}
private static String getAbsoluteUrl(String relativeUrl) {
return BASE_URL + relativeUrl;
}
最佳答案
AsyncHttpResponseHandler
是 android-async-http
的回调
这是 Android 的异步 HTTP 库。它发出异步 HTTP 请求,处理匿名回调 中的响应。这意味着您可以在任何Thread
发送请求,但是在主线程中返回callbacks
,并且在提交请求后,callbacks
不会立即得到回应。您知道,延迟、超时或其他不良情况会在互联网上发生。
关于android - 在循环中不一致地调用 AsyncHttpResponseHandler onsuccess 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29818102/
AsyncHttpClient client = new AsyncHttpClient(); RequestParams params = new RequestParams(); param
我有一个代码调用 PHP web 服务从 mysql 获取 json 数据。然后使用此 json 响应将 android 设备同步到 sqlite。我为每个表创建了 1 个 php。当我只为一张表执行
我正在使用 AsyncHttpResponseHandler 从 RESTful 服务收集数据。我遇到的问题是我无法在 onSuccess 回调中访问我需要的变量。 我的代码如下。 for (int
我有这段代码可以将数据上传到数据库 RequestParams params = new RequestParams(); //prgDialog.show(); params.put("usersJ
我是新手如果可能的话请查看以下代码我不明白问题我的程序正在尝试将文件上传到服务器。但是在这部分代码中出现了一个我无法理解的错误 错误:从 asynchttpResponsehandler 派生的类匿名
大家晚上好。我真的需要一些帮助。过去我在编译应用程序时遇到过一些问题,但目前的情况几乎足以让我不想辞掉我的日常工作。 我有一个在 eclipse 中运行良好的 Android 应用程序。但是,自从上周
我是一名优秀的程序员,十分优秀!