我正在编写代码以将数据从SQLite
数据库发送到MYSQL server
数据库,每当我点击sync data
按钮时,按照我的程序中的方式获取Toast "DB Sync completed"
,但没有在服务器上获取数据...我正在使用this链接
MainActivity.java: -
public void syncSQLiteMySQLDB(){
//Create AsycHttpClient object
AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
ArrayList<HashMap<String, String>> userList = controller.getAllUsers();
if(userList.size()!=0){
if(controller.dbSyncCount() != 0){
prgDialog.show();
params.put("usersJSON", controller.composeJSONfromSQLite());
client.post("http://10.0.2.2/sqlitemysqlsync/insertuser.php",params ,new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String response) {
System.out.println(response);
prgDialog.hide();
try {
JSONArray arr = new JSONArray(response);
System.out.println(arr.length());
for(int i=0; i<arr.length();i++){
JSONObject obj = (JSONObject)arr.get(i);
System.out.println(obj.get("id"));
System.out.println(obj.get("status"));
controller.updateSyncStatus(obj.get("id").toString(),obj.get("status").toString());
}
Toast.makeText(getApplicationContext(), "DB Sync completed!", Toast.LENGTH_LONG).show();
} catch (JSONException e) {
// TODO Auto-generated catch block
Toast.makeText(getApplicationContext(), "Error Occured [Server's JSON response might be invalid]!", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
@Override
public void onFailure(int statusCode, Throwable error,
String content) {
// TODO Auto-generated method stub
prgDialog.hide();
if(statusCode == 404){
Toast.makeText(getApplicationContext(), "Requested resource not found", Toast.LENGTH_LONG).show();
}else if(statusCode == 500){
Toast.makeText(getApplicationContext(), "Something went wrong at server end", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getApplicationContext(), "Unexpected Error occcured! [Most common Error: Device might not be connected to Internet]", Toast.LENGTH_LONG).show();
}
}
});
}else{
Toast.makeText(getApplicationContext(), "SQLite and Remote MySQL DBs are in Sync!", Toast.LENGTH_LONG).show();
}
}else{
Toast.makeText(getApplicationContext(), "No data in SQLite DB, please do enter User name to perform Sync action", Toast.LENGTH_LONG).show();
}
}
DBController.java: -
public class DBController extends SQLiteOpenHelper {
public DBController(Context applicationcontext) {
super(applicationcontext, "androidsqlite.db", null, 1);
}
//Creates Table
@Override
public void onCreate(SQLiteDatabase database) {
String query;
query = "CREATE TABLE users ( userId INTEGER PRIMARY KEY, userName TEXT, udpateStatus TEXT)";
database.execSQL(query);
}
@Override
public void onUpgrade(SQLiteDatabase database, int version_old, int current_version) {
String query;
query = "DROP TABLE IF EXISTS users";
database.execSQL(query);
onCreate(database);
}
/**
* Inserts User into SQLite DB
* @param queryValues
*/
public void insertUser(HashMap<String, String> queryValues) {
SQLiteDatabase database = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("userName", queryValues.get("userName"));
values.put("udpateStatus", "no");
database.insert("users", null, values);
database.close();
}
/**
* Get list of Users from SQLite DB as Array List
* @return
*/
public ArrayList<HashMap<String, String>> getAllUsers() {
ArrayList<HashMap<String, String>> wordList;
wordList = new ArrayList<HashMap<String, String>>();
String selectQuery = "SELECT * FROM users";
SQLiteDatabase database = this.getWritableDatabase();
Cursor cursor = database.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
HashMap<String, String> map = new HashMap<String, String>();
map.put("userId", cursor.getString(0));
map.put("userName", cursor.getString(1));
wordList.add(map);
} while (cursor.moveToNext());
}
database.close();
return wordList;
}
/**
* Compose JSON out of SQLite records
* @return
*/
public String composeJSONfromSQLite(){
ArrayList<HashMap<String, String>> wordList;
wordList = new ArrayList<HashMap<String, String>>();
String selectQuery = "SELECT * FROM users where udpateStatus = '"+"no"+"'";
SQLiteDatabase database = this.getWritableDatabase();
Cursor cursor = database.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
HashMap<String, String> map = new HashMap<String, String>();
map.put("userId", cursor.getString(0));
map.put("userName", cursor.getString(1));
wordList.add(map);
} while (cursor.moveToNext());
}
database.close();
Gson gson = new GsonBuilder().create();
//Use GSON to serialize Array List to JSON
return gson.toJson(wordList);
}
/**
* Get Sync status of SQLite
* @return
*/
public String getSyncStatus(){
String msg = null;
if(this.dbSyncCount() == 0){
msg = "SQLite and Remote MySQL DBs are in Sync!";
}else{
msg = "DB Sync needed\n";
}
return msg;
}
/**
* Get SQLite records that are yet to be Synced
* @return
*/
public int dbSyncCount(){
int count = 0;
String selectQuery = "SELECT * FROM users where udpateStatus = '"+"no"+"'";
SQLiteDatabase database = this.getWritableDatabase();
Cursor cursor = database.rawQuery(selectQuery, null);
count = cursor.getCount();
database.close();
return count;
}
/**
* Update Sync status against each User ID
* @param id
* @param status
*/
public void updateSyncStatus(String id, String status){
SQLiteDatabase database = this.getWritableDatabase();
String updateQuery = "Update users set udpateStatus = '"+ status +"' where userId="+"'"+ id +"'";
Log.d("query",updateQuery);
database.execSQL(updateQuery);
database.close();
}
}
可能是什么原因?为什么我没有在mysql服务器上获取数据?
logcat的:
11-18 05:07:50.574: I/System.out(1174): [{"id":"1","status":"no"},{"id":"2","status":"no"}]
11-18 05:07:50.584: I/System.out(1174): 2
11-18 05:07:50.584: I/System.out(1174): 1
11-18 05:07:50.584: I/System.out(1174): no
11-18 05:07:50.634: D/query(1174): Update users set udpateStatus = 'no' where userId='1'
11-18 05:07:50.694: I/System.out(1174): 2
11-18 05:07:50.694: I/System.out(1174): no
11-18 05:07:50.754: D/query(1174): Update users set udpateStatus = 'no' where userId='2'