当我从MYSQL中检索数据时,org.json.JSONObject无法转换为JSONArray

时间:2016-08-01 14:50:04

标签: php android mysql json

我已经制作了一个PHP代码来从MYSQL获取数据,但现在我正在努力将它恢复到我的android

php代码:

if ($_SERVER['REQUEST_METHOD'] == 'GET') {
    $user_id = $_GET['user_id'];

    require_once('dbConnect.php');

    $user_tags = array();

    foreach ($_REQUEST['user_id'] as $key => $val) {
        $user_tags[$key] = filter_var($val, FILTER_SANITIZE_STRING);
    }

    $user_ids = "'" . implode("','", $user_tags) . "'";
    $sql = "SELECT * FROM user_tags WHERE user_id IN ({$user_ids})";
    $r = mysqli_query($con, $sql);
    //creating a blank array 
    $result = array();
    //looping through all the records fetched

    while ($row = mysqli_fetch_array($r)) {
        $result['tags'][] = $row['tags'];   
    }

    //Displaying the array in json format 
    echo json_encode(array('result' => $result));

    mysqli_close($con);
}

这给出了结果:{"结果":{"标签":[" Pascol"," PHP"," ; Python的"]}}

当我尝试敬酒"标签"在我的android中我收到此错误:

    rg.json.JSONException: Value {"tags":["Pascol","PHP","Python"]} at result       of type org.json.JSONObject cannot be converted to JSONArray

我的安卓代码:

  public class Jobs extends AppCompatActivity {
   public static final String DATA_URL =    "http://allwaysready.16mb.com/Sort.php?work[]=";
public static String tags="";

private String JSON_STRING;
public static final String TAG_JSON_ARRAY="result";
public static final String KEY_USER_TAGS="tags";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_jobs);

    getEmployee();

    Toast.makeText(getApplicationContext(),tags,Toast.LENGTH_LONG).show();
    Toast.makeText(getApplicationContext(),"hi",Toast.LENGTH_LONG).show();
    check();

}

    private void getEmployee(){
    class GetEmployee extends AsyncTask<Void,Void,String>{
        ProgressDialog loading;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            loading = ProgressDialog.show(Jobs.this,"Fetching...","Wait...",false,false);
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            loading.dismiss();
            showEmployee(s);
        }

        @Override
        protected String doInBackground(Void... params) {
            RequestHandler rh = new RequestHandler();
            String s = rh.sendGetRequestParam(Config.URL_GET_TAG,UserAreaActivity.id);
            return s;
        }
    }
    GetEmployee ge = new GetEmployee();
    ge.execute();
}

private void showEmployee(String json) {
    try {
        JSONObject jsonObject = new JSONObject(json);
        JSONArray result = jsonObject.getJSONArray(TAG_JSON_ARRAY);
        JSONObject c = result.getJSONObject(0);
       String ttags = c.getString(KEY_USER_TAGS);
        tags=ttags.toString();
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

2 个答案:

答案 0 :(得分:2)

我认为响应是作为JSONObject发布的。您正在尝试将其转换为JSONArray。

试试这个,

    JSONObject valuejsn = new JSONObject(response);
    JSONArray tags =valuejsn.getJSONArray("tags"); 

答案 1 :(得分:0)

“result”不是JSONArray,它是JSONObject。

尝试做:

JSONObject jsonObject = new JSONObject(json);
JSONObject result = jsonObject.getJSONObject(TAG_JSON_ARRAY);
JSONArray tags = jsonObject.getJSONArray(KEY_USER_TAGS);