I am trying to send my SQLite data with online MySQL server but to no avail. Naturally, I ran to Google and was lucky enough to find this. Apparently it's supposed to work and it does but I am not receiving the data on my server.
I know this question has been asked here and here, but I haven't been able to patch it up using the suggestions given.
Here is what I have tried. This is how I convert my SQLite data into JSON using GSON:
public String composeJSONfromSQLite() { ArrayList<HashMap<String, String>> offlineList; offlineList = new ArrayList<HashMap<String, String>>(); String selectQuery = "SELECT * FROM offlineTable "; SQLiteDatabase database = this.getWritableDatabase(); Cursor cursor = database.rawQuery(selectQuery, null); if (cursor.moveToFirst()) { do { HashMap<String, String> map = new HashMap<String, String>(); map.put("zip", cursor.getString(1)); map.put("phone", cursor.getString(2)); map.put("uid", cursor.getString(3)); offlineList.add(map); } while (cursor.moveToNext()); } database.close(); Gson gson = new GsonBuilder().create(); //Use GSON to serialize Array List to JSON return gson.toJson(offlineList); } And this is how I send it to my server:
public void syncSQLiteMySQLDB() { AsyncHttpClient client = new AsyncHttpClient(); RequestParams params = new RequestParams(); params.put("offline",loadCheckoutDB.composeJSONfromSQLite()); Log.d("offline data log", loadCheckoutDB.composeJSONfromSQLite()); client.addHeader("session_id", getapikey()); client.addHeader("Content-Type", "application/json"); client.post("http://example.com/offline/api", params, new AsyncHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { String s = new String(responseBody); Log.d("response to sync", s); try { JSONObject obj = new JSONObject(s); if (obj.getBoolean("success")) { String success = obj.getString("message"); //Toast.makeText(getApplicationContext(), success, Toast.LENGTH_LONG).show(); } else { String failure = obj.getString("message"); //Toast.makeText(getApplicationContext(), failure, Toast.LENGTH_LONG).show(); } } catch (JSONException e) { } } @Override public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) { // Toast.makeText(getApplicationContext(), "Failed to sync with server", Toast.LENGTH_LONG).show(); Log.d("sqlite sync error", String.valueOf(error)); progbar.setVisibility(View.INVISIBLE); } }); } And when I log what the JASON looks like from Android I get this format:
[{ "zip": "325, "phone": "78291849", "uid": "14538177211" }] But on my server I still get an empty array. What am I doing wrong?
This is how my request format should look like:
{ "offline":[ { "zip": "325, "phone": "78291849", "uid": "14538177211" } ] } Here is how I receive the request:
public function massData() // offline sync { $input = Input::all(); return $input;
arrayon server. do it likeclient.addHeader("data", loadCheckoutDB.composeJSONfromSQLite());offlinein server side code