我正在尝试从与外部数据库通信的 php 获得的 JSON 填充 Spinner。我不断收到 JSON 异常错误。
我想要得到的是一个下拉列表,我可以在其中选择宠物类型(即狗、猫、鱼等)
这是我从 JSONParser
获得的 JSON:
{"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;
}
索引.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);
}
填写我在 OnCreate()
期间调用的 asyncTask 下拉列表:
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"));
}
关于php - 如何使用 JSON 从外部数据库填充微调器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35004422/