JSONArray为空。

3

我从数据库中读取数据(仅最后一行,在我的php文件中执行),我想要做的是分别使用每个字段的数据,但问题是JSONArray为空,我尝试了很多方法在不同的帖子中寻找它,但总是为空。

这是我的代码

public class MainActivity extends Activity {
    /** Called when the activity is first created. */

    JSONArray jArray = null;
    String result = null;
    InputStream is = null;
    StringBuilder sb=null;

    String ct_id;
    String ct_name;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
      //http post
        try{
            HttpClient httpclient = new DefaultHttpClient();

            HttpPost httppost= new HttpPost("http://xxx.php");


            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();

         }catch(Exception e){
            Log.e("log_tag", "Error in http connection"+e.toString());
         }
      //convert response to string
        try{
              BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
               sb = new StringBuilder();


               String line=null;
               while ((line = reader.readLine()) != null) {
                              sb.append(line + "\n");
                }
                is.close();
                result=sb.toString();
                }catch(Exception e){
                      Log.e("log_tag", "Error converting result "+e.toString());
                }
        //paring data

        try{
              jArray = new JSONArray(result);
              JSONObject json_data=null;
              for(int i=0;i<jArray.length();i++){
                     json_data = jArray.getJSONObject(i);
                     ct_id=json_data.getString("fecha");
                     ct_name=json_data.getString("dia");
                 }
              }
              catch(JSONException e1){
                  Toast.makeText(getBaseContext(), "JSON is empty" ,Toast.LENGTH_LONG).show();
              } catch (ParseException e1) {
                    e1.printStackTrace();
            }


    }
}

它总是捕获JSONException e1。

提前感谢大家。


你确定 PHP 正确地格式化了回复吗? - TheZ
我在这个问题中完全没有看到任何关于 PHP 的参考。 - Matt
发布JSON字符串以便查看JSON是否正确传输。此外,如果添加一些标头可能会有所帮助。 - hakre
@TheZ 所以理论上,你主张在一个问题中使用PHP标签,该问题询问“我在我的站点上使用PHP,但我需要帮助解决这个Javascript问题…”? - Matt
@Matt 实际上,这是Java(不是javascript),我仍然相信问题的根源是PHP代码(因为OP编写了它,并且OP从字符串中得到了JSON异常)。 - TheZ
显示剩余13条评论
3个回答

0

在检查JSON响应后,最好尝试使用GSON,更加方便。

        JsonParser jsonParser = new JsonParser();
        JsonArray jArray;
if ( jsonParser.parse(result).isJsonArray() ) {
    jArray = jsonParser.parse(result).getAsJsonArray();
} 
else { jArray = new JsonArray(); }

为此,我必须创建一个名为JSONParser的新类。我在这篇文章中阅读了它 http://www.androidhive.info/2012/01/android-json-parsing-tutorial/,但它是从JSON文件中读取,而不是从数据库中读取。我能不能像示例那样做呢?谢谢。 - Ivan

0
result中检查返回的字符串。可能不仅有json结构(错误,警告等)。JSON拼写检查器:http://jsonlint.com/

谢谢ruX,我该如何使用它?我需要哪些代码进行验证? - Ivan
我从数据库中获取数据,而不是从JSON中获取。这是误解吗? - Ivan
将浏览器中的“http://xxx.php”响应复制并粘贴到jsonlint中以检查生成的输出。 - ruX
它以 ([{ 开始,而不是 {。你自己回答 :) 检查 PHP 脚本输出的 '(' 符号并将其删除。 - ruX
我修改了 PHP 代码,现在它以 [{ 开头,如何去掉 [? - Ivan
显示剩余2条评论

0
问题出在 PHP 文件中,JSON 无法理解数据,因此数据为空,我进行了更改,现在它可以正常工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接