Я пытаюсь получить местоположение (широта, долгота) из приложения Android и вставить в базу данных с помощью php, а затем извлечь данные в радиусе 10 м.
Проблема в том, что когда я тестирую код с помощью смартфона (локальный тест в порядке), данные неправильно вставлены. В таблице «usergps» есть 3 столбца (имя, широта, долгота), и после того, как я проверил код, (, 0, 0) вставлен.
Вы можете проверить код ниже? Я добавил код Java.
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_getgps); public void onClick(View view) { gps = new GpsActivity(getGpsValues.this); //this is new part Intent intent = getIntent(); // Receiving the Data from MainActivity HashMap<String, String> user = db.getUserDetails(); String name = user.get("name"); String email = user.get("email"); if(gps.canGetLocation()){ double lat = gps.getLatitude(); double lon = gps.getLongitude(); sendGps(lat,lon,name); } HashMap<String, String> gps = db.getNumbers(); String num = gps.get("num");
}}
private void sendGps(final Double lat, final Double lon, final String name) { // Tag used to cancel the request String tag_string_req = "req_gps"; StringRequest strReq = new StringRequest(Method.POST, AppConfig.URL_GPS, new Response.Listener<String>() { @Override public void onResponse(String response) { Log.d(TAG, "GPS Response: " + response.toString()); hideDialog(); try { JSONObject jObj = new JSONObject(response); boolean error = jObj.getBoolean("error"); if (!error) { // GPS successfully stored in MySQL // Now store the GPS in sqlite JSONObject gps = jObj.getJSONObject("gps"); Double lat = gps.getDouble("lat"); Double lon = gps.getDouble("lon"); String name = gps.getString("name"); // Inserting row in users table. db.addGps(lat, lon, name); } else { // Error occurred in registration. Get the error // message String errorMsg = jObj.getString("error_msg"); Toast.makeText(getApplicationContext(), errorMsg, Toast.LENGTH_LONG).show(); } } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e(TAG, "Registration Error: " + error.getMessage()); Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show(); hideDialog(); } }) { }; // Adding request to request queue AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
}
эта часть получает данные от php. это еще один класс.
/** * Getting user data from database * */ public HashMap<String, String> getUserDetails() { HashMap<String, String> user = new HashMap<String, String>(); String selectQuery = "SELECT * FROM " + TABLE_LOGIN; SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery(selectQuery, null); // Move to first row cursor.moveToFirst(); if (cursor.getCount() > 0) { user.put("name", cursor.getString(1)); user.put("email", cursor.getString(2)); user.put("uid", cursor.getString(3)); user.put("created_at", cursor.getString(4)); } cursor.close(); db.close(); // return user Log.d(TAG, "Fetching user from Sqlite: " + user.toString()); return user; } public HashMap<String, String> getNumbers() { HashMap<String, String> gps = new HashMap<String, String>(); String selectQuery = "SELECT * FROM " + TABLE_GPS; SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery(selectQuery, null); // Move to first row cursor.moveToFirst(); if (cursor.getCount() > 0) { gps.put("num", cursor.getString(1)); } cursor.close(); db.close(); // return user Log.d(TAG, "Fetching user from Sqlite: " + gps.toString()); return gps; }
и PHP-код здесь. Ошибка подключения php в Android? (+ MySQL)
Я не могу проверить ошибку в logcat. Я должен проверить это, используя смартфон. Пожалуйста, проверьте код и дайте мне знать.
HashMap<String, String> params = new HashMap<String, String>(); params.put("lat", ""+lat); params.put("lon", ""+lon); params.put("name", name); JsonObjectRequest strReq = new JsonObjectRequest(Request.Method.POST, AppConfig.URL_GPS, new JSONObject(params), new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { Log.d(TAG, "GPS Response: " + response.toString()); hideDialog(); try { JSONObject jObj = new JSONObject(); boolean error = jObj.getBoolean("error"); if (!error) { JSONObject gps = jObj.getJSONObject("gps"); String name = gps.getString("name"); Double lat = gps.getDouble("lat"); Double lon = gps.getDouble("lon"); // Inserting row in users table. db.addGps(name, lat, lon); ...
в вашей:
private void sendGps(final Double lat, final Double lon, final String name)
метод, вы не отправляете params (lat lon name) на ваш PHP-сервер. Я не очень хорошо знаком с PHP, но, полагаю, поскольку эти параметры не включены в ваш POST, php использует значения по умолчанию: «» для String и 0 для чисел.
для отправки данных, необходимых для изменения запроса от StringRequest к JsonObjectRequest
поэтому ваш код выглядит примерно так:
HashMap<String, String> params = new HashMap<String, String>(); params.put("lat", ""+lat); params.put("lon", ""+lon); params.put("name", name); JsonObjectRequest strReq = new JsonObjectRequest( AppConfig.URL_GPS, new JSONObject(params), new Response.Listener<String>() {
имейте в виду, что вам нужно изменить слушателя ответа, потому что теперь вы получаете ответ объекта json.