Я пытаюсь заполнить Spinner из JSON, который я получил от php, который взаимодействует с внешней базой данных. Я получаю ошибку исключения JSON.
Я хотел бы получить раскрывающийся список, в котором я могу выбрать тип домашнего животного (например, собаку, кошку, рыбу и т. Д.).
Это тот JSON, который я получил от JSONParser
:
{"success":1,"0":{"pets_kind":"dog"},"1":{"pets_kind":"cat"}}
Это мой PHP:
DB_Functions.php
:
public function getPetKind(){
$result = array();
$fetch = mysql_query("SELECT pets_kind FROM PetsList") or die(mysql_error());
while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) {
$row_array['pets_kind'] = $row['pets_kind'];
array_push($result,$row_array);
}
return $result;
}
index.php:
}else if($tag == 'getpetkind'){
$pets_kind = array();
$pets_kind = $db->getPetKind();
if($pets_kind != false){
$response = array();
$response["success"]=1;
foreach ($pets_kind as $row) {
$row_array['pets_kind'] = $row['pets_kind'];
array_push($response,$row_array);
}
echo json_encode($response);
}
Заполните выпадающий asyncTask, который я вызываю во время OnCreate()
:
private class FillDropDown extends AsyncTask<String,Void,JSONObject>{
@Override
protected void onPreExecute(){
super.onPreExecute();
petsKindDropDown = (Spinner) findViewById(R.id.petsKindDropDown);
}
@Override
protected JSONObject doInBackground(String... args){
UserFunctions userFunctions = new UserFunctions();
JSONObject json = userFunctions.getPetsKind();
return json;
}
@Override
protected void onPostExecute(JSONObject json){
/**
* Checks for success message
*/
try{
if(json.getString(KEY_SUCCESS) != null){
ArrayList<String> kind = new ArrayList<String>();
JSONArray jsonArr = new JSONArray(json.optString("pets_kind"));
for(int i = 0; i < jsonArr.length(); i++){
JSONObject jsonObject = jsonArr.getJSONObject(i);
kind.add(jsonObject.optString("pets_kind"));
}
petsKindDropDown.setAdapter(new ArrayAdapter<String>(AddPet.this,
android.R.layout.simple_spinner_dropdown_item,kind));
}
else{
addPetAlertText.setText("Error occured in Filling Drop down");
}
} catch (JSONException e){
e.printStackTrace();
}
}
}
Ошибка:
W/System.err: org.json.JSONException: End of input at character 0 of
W/System.err: at org.json.JSONTokener.syntaxError(JSONTokener.java:449)
W/System.err: at org.json.JSONTokener.nextValue(JSONTokener.java:97)
W/System.err: at org.json.JSONArray.<init>(JSONArray.java:92)
W/System.err: at org.json.JSONArray.<init>(JSONArray.java:108)
W/System.err: at com.adicili.petdetective.AddPet$FillDropDown.onPostExecute(AddPet.java:133)
W/System.err: at com.adicili.petdetective.AddPet$FillDropDown.onPostExecute(AddPet.java:103)
W/System.err: at android.os.AsyncTask.finish(AsyncTask.java:651)
W/System.err: at android.os.AsyncTask.-wrap1(AsyncTask.java)
W/System.err: at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err: at android.os.Looper.loop(Looper.java:148)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5417)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Изменить PHP
функционировать так:
public function getPetKind(){
$result = array();
$fetch = mysql_query("SELECT pets_kind FROM PetsList") or die(mysql_error());
while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) {
$result[] = $row;
}
return $result;
}
и построить JSON, как это:
$response = array();
$pets_kind = $db->getPetKind();
if(count($pets_kind) > 0){
$response["success"]=1;
$response["result"]=$pets_kind;
}else{
$response["success"]=0;
$response["result"]='no pet found';
}
echo json_encode($response);
а затем ваш код Java, как показано ниже:
ArrayList<String> kind = new ArrayList<String>();
JSONArray jsonArr = json.getJSONArray("result");
for(int i = 0; i < jsonArr.length(); i++){
JSONObject jsonObject = jsonArr.getJSONObject(i);
kind.add(jsonObject.optString("pets_kind"));
}
Других решений пока нет …