【问题标题】:org.json.JSONException: Value Exception of type java.lang.String cannot be converted to JSONArrayorg.json.JSONException:java.lang.String 类型的值异常无法转换为 JSONArray
【发布时间】:2015-11-05 02:31:42
【问题描述】:

我得到了这个例外两天

"org.json.JSONException: java.lang.String 类型的值异常无法转换为 JSONArray",

我在网上搜索过,但无法解决。

它在浏览器中为我提供了理想的响应,但我不知道 android 有什么问题!

请帮助我。 这是我的代码

private class SigninActivity extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... arg0) {
        String newString="";
        try {
            String tonTexte = loginDisplay.getText().toString();
            String tonTexte1 = passDisplay.getText().toString();
            String link = "http://192.168.56.1/projects/stage/atelier.php";
            String data = URLEncoder.encode("username", "UTF-8") + "=" + URLEncoder.encode(tonTexte, "UTF-8");
            data += "&" + URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode(tonTexte1, "UTF-8");
            URL url = new URL(link);
            URLConnection conn = url.openConnection();
            conn.setDoOutput(true);
            OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
            wr.write(data);
            wr.flush();           
            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"),8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            // Read Server Response
            while ((line = reader.readLine()) != null) {
                sb.append(line);
                break;
            }
            return sb.substring(sb.indexOf("{"),sb.lastIndexOf("}") + 1);
        } 
        catch (Exception e) {
            return new String("Exception: " + e.getMessage());
        }
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected void onPostExecute(String result) {
        TextView a = (TextView) findViewById(R.id.aff);
        JSONObject json_data=null;
        TextView b = (TextView) findViewById(R.id.aff1);
        //recuperation des donnees json
        try{
            //String jsonObjRecv = JSONGet.getJSONfromURL(URL_LIST);
            if(!TextUtils.isEmpty(result)) {
                JSONArray jArray = new JSONArray(result);
                for (int i = 0; i < jArray.length(); i++) {
                    json_data = jArray.getJSONObject(i);
                    Log.i("log_tag", "cin: " + json_data.getString("nom"));
                    donnees.add(json_data.getString("nom"));
                    donnees1.add(json_data.getString("atelier"));                  
                }
                for (String elem : donnees) {
                    a.setText(elem);
                }
                for (String elem : donnees1) {
                    b.setText(elem);
                }
            }
            else{
                Log.w("json", "result is null");
            }
        }
        catch(JSONException e){
            Log.i("tagjsonexp",""+e.toString());
        } 
        catch (ParseException e) {
            Log.i("tagjsonpars", "" + e.toString());
        }
    }
}

这里是php代码

<?php
error_reporting(E_ALL ^ E_DEPRECATED);
$base = mysql_connect ('localhost', 'root', '');  
mysql_select_db ('stage', $base) ;  
$output=array();
$username = $_POST['username'];
$password = $_POST['password'];
$sql=mysql_query("SELECT CIN FROM authentification where login= '".$username."'   AND password = '".$password. "'");
//$sql=mysql_query("SELECT CIN FROM authentification where login= 'amani'   AND password = '123' ");
if (!$sql) {
    die(mysql_error());
}
while($data = mysql_fetch_array($sql))
{
$a=$data['CIN'];
}
    $sql1=mysql_query("SELECT nom,atelier FROM controlleur where CIN= '".$a."'");
while($row=mysql_fetch_assoc($sql1))
{
$output[]=$row;

//print(json_encode(array($output));
print(json_encode(array("NomTableau" => $output)));
mysql_close();
?>

【问题讨论】:

  • 发布您从网络服务获得的响应
  • 还有堆栈跟踪,至少 - 你已经发布了 lot 的 Java 代码,我们不知道错误在哪里。理想情况下,您应该自己缩小范围并展示一个简短但完整的程序,只是演示了问题......
  • 如果响应包含在方括号中,则将其视为 JSONObject。而且我认为 JSONArray 有整数索引。

标签: java php android json


【解决方案1】:

假设您的 PHP 脚本正在生成正确的 JSON。尝试更改此部分

JSONArray jArray = new JSONArray(result);

到这个。

JSONObject jObject = new JSONObject(result);
JSONArray jArray = jObject.getJSONArray("NomTableau");

【讨论】:

  • 谢谢你,但我试过了,我得到了同样的回应:(
  • println result 并在您的 logcat 中查看 json 是否正确且格式正确 @amani92
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-09
  • 1970-01-01
相关资源
最近更新 更多