Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Json类型不匹配:无法转换为字符串_Java_Android_Json - Fatal编程技术网

Java Json类型不匹配:无法转换为字符串

Java Json类型不匹配:无法转换为字符串,java,android,json,Java,Android,Json,我正在开发一个程序,该程序将发布到服务器并检索json对象,然后将其转换为字符串数组 当我在浏览器上测试结果时,我得到以下结果: {"Bookname":["Alive-O","All Write Now ","Bun Go Barr 1","Planet Maths","Small World"],"SubjectName":["Religion","English","Irish","Maths","Science"]} 这是我的类,我在其中发布和转换字符串: try { Http

我正在开发一个程序,该程序将发布到服务器并检索json对象,然后将其转换为字符串数组

当我在浏览器上测试结果时,我得到以下结果:

{"Bookname":["Alive-O","All Write Now ","Bun Go Barr 1","Planet Maths","Small World"],"SubjectName":["Religion","English","Irish","Maths","Science"]}
这是我的类,我在其中发布和转换字符串:

try {
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://cosy.azurewebsites.net/bookrequest.php");

    User user = userLocalStore.getLoggedInUser();

    String username = user.username;

    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
    nameValuePairs.add(new BasicNameValuePair( "Username", username ));
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

    HttpResponse response = httpclient.execute(httppost);
    HttpEntity entity = response.getEntity();


    String result = EntityUtils.toString(entity);
    JSONObject jsonObject = new JSONObject(result);

    JSONArray jsonArray = jsonObject.getJSONArray("Bookname");
    BookName = new String[jsonArray.length()];
    for (int i = 0; i < jsonArray.length(); i++) {
        BookName[i] = jsonArray.getString(i);
    }

    // for getting subjectnames
    Log.v("we're getting a subject", "2");

    jsonArray = jsonObject.getJSONArray("SubjectName");
    BookSubject = new String[jsonArray.length()];
    for (int i = 0; i < jsonArray.length(); i++) {
        BookSubject[i] = jsonArray.getString(i);
    }

} 
试试看{
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(“http://cosy.azurewebsites.net/bookrequest.php");
User User=userLocalStore.getLoggedInUser();
字符串username=user.username;
List nameValuePairs=新的ArrayList(1);
添加(新的BasicNameValuePair(“用户名”,Username));
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
HttpResponse response=httpclient.execute(httppost);
HttpEntity=response.getEntity();
字符串结果=EntityUtils.toString(实体);
JSONObject JSONObject=新JSONObject(结果);
JSONArray JSONArray=jsonObject.getJSONArray(“书名”);
BookName=新字符串[jsonArray.length()];
for(int i=0;i
下面是我的日志猫告诉我的:

02-21 18:15:35.538    1436-3694/net.azurewebsites.cosy W/System.err﹕ org.json.JSONException: Value [] of type org.json.JSONArray cannot be converted to JSONObject
02-21 18:15:35.538    1436-3694/net.azurewebsites.cosy W/System.err﹕ at org.json.JSON.typeMismatch(JSON.java:111)
02-21 18:15:35.538    1436-3694/net.azurewebsites.cosy W/System.err﹕ at org.json.JSONObject.<init>(JSONObject.java:159)
02-21 18:15:35.538    1436-3694/net.azurewebsites.cosy W/System.err﹕ at org.json.JSONObject.<init>(JSONObject.java:172)
02-21 18:15:35.538    1436-3694/net.azurewebsites.cosy W/System.err﹕ at net.azurewebsites.cosy.Books$getBooks.doInBackground(Books.java:148)
02-21 18:15:35.538    1436-3694/net.azurewebsites.cosy W/System.err﹕ at net.azurewebsites.cosy.Books$getBooks.doInBackground(Books.java:106)
02-21 18:15:35.538    1436-3694/net.azurewebsites.cosy W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:288)
02-21 18:15:35.538    1436-3694/net.azurewebsites.cosy W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
02-21 18:15:35.542    1436-3694/net.azurewebsites.cosy W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
02-21 18:15:35.542    1436-3694/net.azurewebsites.cosy W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
02-21 18:15:35.542    1436-3694/net.azurewebsites.cosy W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
02-21 18:15:35.542    1436-3694/net.azurewebsites.cosy W/System.err﹕ at java.lang.Thread.run(Thread.java:841)
02-21 18:15:35.538 1436-3694/net.azurewebsites.cosy W/System.err﹕ org.json.JSONException:org.json.JSONArray类型的值[]无法转换为JSONObject
02-21 18:15:35.538 1436-3694/net.azurewebsites.cosy W/System.err﹕ 在org.json.json.typeMismatch(json.java:111)
02-21 18:15:35.538 1436-3694/net.azurewebsites.cosy W/System.err﹕ 位于org.json.JSONObject(JSONObject.java:159)
02-21 18:15:35.538 1436-3694/net.azurewebsites.cosy W/System.err﹕ 位于org.json.JSONObject(JSONObject.java:172)
02-21 18:15:35.538 1436-3694/net.azurewebsites.cosy W/System.err﹕ 在net.azurewebsites.cosy.Books$getBooks.doInBackground(Books.java:148)
02-21 18:15:35.538 1436-3694/net.azurewebsites.cosy W/System.err﹕ 在net.azurewebsites.cosy.Books$getBooks.doInBackground(Books.java:106)
02-21 18:15:35.538 1436-3694/net.azurewebsites.cosy W/System.err﹕ 在android.os.AsyncTask$2.call(AsyncTask.java:288)
02-21 18:15:35.538 1436-3694/net.azurewebsites.cosy W/System.err﹕ 位于java.util.concurrent.FutureTask.run(FutureTask.java:237)
02-21 18:15:35.542146-3694/net.azurewebsites.cosy W/System.err﹕ 在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
02-21 18:15:35.542146-3694/net.azurewebsites.cosy W/System.err﹕ 位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
02-21 18:15:35.542146-3694/net.azurewebsites.cosy W/System.err﹕ 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
02-21 18:15:35.542146-3694/net.azurewebsites.cosy W/System.err﹕ 运行(Thread.java:841)

我试图让它在课堂上用作数组

错误表示您正试图将
JSONArray
转换为
JSONObject
,这意味着此指令:

JSONObject jsonObject = new JSONObject(result);
这是有问题的。您得到的JSON很有可能被括号包围(因为您是在浏览器中测试的,而不是在移动设备上测试的)。尝试更改:

JSONObject jsonObject = new JSONObject(result);


该错误表示您正试图将
JSONArray
转换为
JSONObject
,这意味着此指令:

JSONObject jsonObject = new JSONObject(result);
这是有问题的。您得到的JSON很有可能被括号包围(因为您是在浏览器中测试的,而不是在移动设备上测试的)。尝试更改:

JSONObject jsonObject = new JSONObject(result);


您得到的错误是哪一行?@Majora320 String result=EntityUtils.toString(entity);JSONObject JSONObject=新JSONObject(结果);行是否正常,这就是@DeveloperXy所说的,您得到的错误是哪行?@Majora320 String result=EntityUtils.toString(entity);JSONObject JSONObject=新JSONObject(结果);行正常吗,@DeveloperXy saidI就是这么做的,它修复了这个错误,现在说org.json.JSONException:Index 0超出范围[0..0),这意味着您从服务器得到的响应是空的
JSONArray
([])。请通过将您得到的响应记录到logcat来确认我的理论。您是正确的响应是[]这是非常奇怪的,我知道发布的内容是正确的,所以我不知道为什么happening@EoinÓCribín在这种情况下,您必须确保与服务器建立成功的连接。修复了获得结果的问题帖子是大写字母(愚蠢的错误)虽然我得到了相同的错误,但它不会转换结果如下:02-21 18:52:03.643 1478-1523/net.azurewebsites.cosy W/System.err﹕ org.json.JSONException:org.json.JSONObject类型的值{“Bookname”:[“Alive-O”,“All Write Now”,“Bun Go Barr 1”,“行星数学”,“Small World”],“SubjectName:[“宗教”,“英语”,“爱尔兰”,“数学”,“科学”]}无法转换为JSONArrayI,它修复了错误,现在说org.json.JSONException:Index 0超出范围[0..0)这意味着您从服务器得到的响应是一个空的
JSONArray
([])。请将您得到的响应记录到logcat以确认我的理论。您是对的响应是[]这是非常奇怪的,我知道发布的内容是正确的,所以我不知道为什么happening@EoinÓCribín在这种情况下,您必须确保与服务器建立成功的连接。修复了获得结果的问题帖子是大写字母(愚蠢的错误)虽然我得到了相同的错误,但它不会转换结果如下:02-21 18:52:03.643 1478-1523/net.azurewebsites.cosy W/System.err﹕ org.json.JSONException:Value{“Bookname”:[“Alive-O”,“立即全部写入”,“Bun-Go-Barr 1”,“Pl