Как заполнить счетчик из внешней базы данных с помощью JSON

Я пытаюсь заполнить 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)

1

Решение

Изменить 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"));
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]