#java #php #android #mysql #debugging
Вопрос:
Это мой первый раз, когда я работаю с Android/базой данных, поэтому я немного теряюсь в том, что делать, любая помощь приветствуется. Я попытался найти возможные ошибки в Интернете, но застрял, так как не знаю, как описать то, что я вижу.
private static Maplt;String, Stringgt; returnMap;
У меня есть хэш-карта, которая содержит значения SQL-запроса, и я хотел бы, чтобы мой метод возвращался к действию, которое его вызвало.
public Maplt;String, Stringgt; sql_query(final String sqlStatement, final Context context){ returnMap = new HashMaplt;gt;(); returnMap.put("success", "0"); returnMap.put("data", "TEST"); mRequestQueue = Volley.newRequestQueue(context); mStringRequest = new StringRequest(Request.Method.POST, querySqlURL(context, "run_query.php"), new Response.Listenerlt;Stringgt;(){ @Override public void onResponse(String response) { try { JSONObject jsonObject = new JSONObject(response); String success = jsonObject.getString("success"); String message = jsonObject.getString("message"); if (success.equals("1")) { Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); returnMap.put("success", success); returnMap.put("data", message); } } catch (JSONException e) { Log.e("Debug", response); returnMap.put("success", "0"); returnMap.put("data", e.toString()); //Toast.makeText(context, e.toString(), Toast.LENGTH_SHORT).show(); } } }, new Response.ErrorListener(){ @Override public void onErrorResponse(VolleyError error){ //Toast.makeText(context, error.toString(), Toast.LENGTH_SHORT).show(); returnMap.put("success", "0"); returnMap.put("data", error.toString()); } }) { @Override protected Maplt;String, Stringgt; getParams() throws AuthFailureError { Maplt;String, Stringgt; params = new HashMaplt;gt;(); //params.put("sql", "INSERT INTO test_table(text) VALUES('" text "')"); params.put("sql", sqlStatement); return params; } }; mStringRequest.setShouldCache(false); mRequestQueue.add(mStringRequest); Toast.makeText(context, returnMap.get("success") " " returnMap.get("data"), Toast.LENGTH_SHORT).show(); return returnMap; }
Я подтвердил, что эта часть поступает, так как окно тостов может отображать данные, которые я пытаюсь получить.
if (success.equals("1")) { Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); returnMap.put("success", success); returnMap.put("data", message); }
Но я не уверен, почему returnMap всегда возвращает значения 0 и ТЕСТ, который установлен сверху для целей тестирования.
Это моя основная деятельность
postRequest.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO: Insert in data to test_table Maplt;String,Stringgt; returnTable = database.sql_query("SELECT * FROM test_table", MainActivity.this); Toast.makeText(MainActivity.this, returnTable.get("success") " " returnTable.get("data"), Toast.LENGTH_SHORT).show(); if (returnTable.get("success").equals("1")) { // Successful postRequest.setText("Select"); tempText.setText(returnTable.get("data")); //Toast.makeText(MainActivity.this, "Successfully grabbed data", Toast.LENGTH_SHORT).show(); } else { // Fail postRequest.setText("Select fail"); tempText.setText(returnTable.get("data")); //Toast.makeText(MainActivity.this, "Failed to add to database!", Toast.LENGTH_SHORT).show(); } } }); }
Произнесение тоста сразу после установки значений в hashmap, если успех равен «1», выводит правильное значение, но печать его прямо перед возвращением отображает 0 и проверяет agn, без установки значений по умолчанию сверху, похоже, возвращает значение null. Я считаю, что это должно произойти, поскольку успех и данные устанавливаются в каждом сценарии, но я мог что-то упустить. У меня есть несколько предложений от друзей, которые могут предположить, что onResponse может быть асинхронным, но я не уверен, так ли это, и если да, то что делать, чтобы решить эту проблему, все помогает!