如何使用JSON

时间:2016-01-25 23:27:48

标签: php android json spinner dropdown

我正在尝试从JSON中填充一个Spinner,这是我从与外部数据库通信的php中获得的。我一直收到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)

1 个答案:

答案 0 :(得分: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"));
}