php - 如何使用 JSON 从外部数据库填充微调器

标签 php android json spinner dropdown

我正在尝试从与外部数据库通信的 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/

相关文章:

android 如何同时拥有edittext自动格式本身和可计算的值

android - 当 fragment 出现在屏幕上时如何收听

json - 为什么我的 Spotify 应用程序中对外部 API 的 JSON 请求被取消?

javascript - 比较对象中的元素

php - 在 PHP 中使用 DOMXPath 获取 XML 属性,忽略命名空间

php - onbeforeunload 事件上的 jQuery.ajax 不起作用

php - 从所有自定义帖子类型中删除 _thumbnail_id

php - PHP 中大型项目的对象和类结构

android - 在 Eclipse 中创建新 keystore 时出错

mysql - 更新 Eloquent 模型的 JSON 字段