【问题标题】:How to fill spinner from an external database using JSON如何使用 JSON 从外部数据库填充微调器
【发布时间】:2016-01-25 23:27:48
【问题描述】:

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

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);

    }

填写我在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 android json spinner dropdown


    【解决方案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"));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      • 2020-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多