【问题标题】:org.json.JSONObject cannot be converted to JSONArray while i retrive data from MYSQL当我从 MYSQL 检索数据时,org.json.JSONObject 无法转换为 JSONArray
【发布时间】:2016-08-01 14:50:04
【问题描述】:

我已经编写了一个 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);
}

这给出了结果:{"result":{"tags":["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();
    }
}

【问题讨论】:

    标签: php android mysql json


    【解决方案1】:

    我认为响应是以 JSONObject 的形式出现的。您正在尝试将其转换为 JSONArray。

    试试这个,

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

    【讨论】:

    • 我得到这个错误:json.JSONException: No value for tags
    • 您能回复一下吗?
    • JSONObject responseObject = new JSONObject( responsestring ); JSONObject resultobject = responseObject.getJSONObject("result"); JSONArray tagsArray = resultobject.getJSONArray("tags");
    • 你能用我编的“showemployee”的确切功能进行编辑吗?因为我无法清楚你的想法。请
    【解决方案2】:

    “结果”不是 JSONArray,而是 JSONObject。

    尝试做:

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

    【讨论】:

    • 我得到:org.json.JSONException: No value for tags... :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    相关资源
    最近更新 更多