Согласно предоставленной вами информации, у вас нет проблем с использованием метода Volley StringRequest
- загрузка работает правильно, а метод getParams()
вызывается правильно.Знайте, что запрос сервера вернет строку!Если вы используете json_encode()
в своем коде PHP, тогда эта строка будет закодирована в JSON String
.Вы не предоставили код PHP ... поэтому я просто должен предположить, что все стороны PHP настроены правильно.
Вы можете использовать эту строку в кодировке JSON для создания JSONArray
, просто используя JSONArray array = new JSONArray(response);
где «response» - это возвращаемое значение из StringRequest
.Поэтому просто создайте метод, подобный методу downLoadDataVolley()
, приведенному ниже, и при необходимости передайте URL.
private void downLoadDataVolley(String url){
RequestQueue requestQueue = Volley.newRequestQueue(this);
StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//INFO:: The response is of String type, but it is a JSON encoded String..
// !! as long as the PHP code is indeed returning JSON!!
// IF the JSON encoded string is structured as a JSONArray then do this...
JSONArray array = new JSONArray(response);
for(int i = 0; i < array.length(); i++){
JSONObject o = array.getJSONObject(i);
Iterator<String> it = o.keys();
while(it.hasNext()){
String key = it.next();
String value = o.optString(key, "NA");
Log.e("Try to Parse", "key = " + key + " value = " + value);
}
//String s = o.optString("key", "NA");
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError e) {
e.printStackTrace();
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String , String> params = new HashMap<String, String>();
//put values in the params....
params.put("category",""+click);
params.put("quizno",""+listclick);
//return params....and values to the php script...
return params;
}};
requestQueue.add(stringRequest);
}
В вашем случае вы можете вызвать downLoadDataVolley(server_url)
, и все должно работать нормально (как это делалось ранее)за исключением этого времени вы преобразуете строку в JSONArray
.
Вместо просто String s = o.optString("key", "NA");
вам нужно будет добавить свой код вместо этого, но я настоятельно рекомендую использовать optString()
или optInt()
, так как эти методы даютВы можете использовать дополнительные резервные значения.
Пожалуйста, дайте мне знать, если у вас есть какие-либо дополнительные вопросы.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ
Я набираю это в стандартном текстовом редакторе ... так что у меня не было преимущества автозамены для моего кода - может быть опечатка или два.