Java JSONException:数据没有值

Java JSONException:数据没有值,java,android,json,facebook,Java,Android,Json,Facebook,我试图从Facebook页面获取posts数据,但JSON对象中没有显示任何数据 Facebook只允许我们在拥有访问令牌时访问数据,我在代码中提到了这一点。不过,它没有返回任何数据 我已登录facebook,会话处于活动状态 fb.authorize(MainActivity.this, new DialogListener() { @Override public void onComplete(Bundle values) {

我试图从Facebook页面获取posts数据,但JSON对象中没有显示任何数据

Facebook只允许我们在拥有访问令牌时访问数据,我在代码中提到了这一点。不过,它没有返回任何数据

我已登录facebook,会话处于活动状态

fb.authorize(MainActivity.this, new DialogListener() {


            @Override
            public void onComplete(Bundle values) {
                // TODO Auto-generated method stub
                Toast.makeText(MainActivity.this, "OnComplete", Toast.LENGTH_SHORT);
                Editor editor=sp.edit();
                editor.putString("access_token", fb.getAccessToken());
                editor.putLong("access_expires", fb.getAccessExpires());
                editor.commit();
                try {
                    updateButtonImage();
                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                Intent i = new Intent(MainActivity.this, NewsFeed.class);
                startActivity(i);

            }
在NewsFeed.java中,我使用以下代码解析了JSON

JSONParser jParser = new JSONParser();
    JSONArray jobj = jParser.getJSONFromUrl(url);
    if(jobj==null){
        Log.d("NULLOBJECT", "The object is null");
    }else{
        Log.d("NULLOBJECT", jobj.toString());
    }
JSONParser.java

public class JSONParser {
static InputStream is = null;
  static JSONArray jObj = null;
  static String json = "";
  // constructor
  public JSONParser() {
  }
  public JSONArray getJSONFromUrl(String url) {
    // Making HTTP request
    try {
      // defaultHttpClient
      DefaultHttpClient httpClient = new DefaultHttpClient();
      HttpPost httpPost = new HttpPost(url);
      HttpResponse httpResponse = httpClient.execute(httpPost);
      HttpEntity httpEntity = httpResponse.getEntity();
      is = httpEntity.getContent();
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    } catch (ClientProtocolException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
    try {
      BufferedReader reader = new BufferedReader(new InputStreamReader(
          is, "iso-8859-1"), 8);
      StringBuilder sb = new StringBuilder();
      String line = null;
      while ((line = reader.readLine()) != null) {
        sb.append(line + "n");
      }
      is.close();
      json = sb.toString();
    } catch (Exception e) {
      Log.e("Buffer Error", "Error converting result " + e.toString());
    }
    // try parse the string to a JSON object
    try {
      jObj = new JSONArray(json);
    } catch (JSONException e) {
      Log.e("JSON Parser", "Error parsing data " + e.toString());
    }
    // return JSON String
    return jObj;
  }

}最有可能的解释是,你从Facebook得到的东西不是JSON。相反,我猜测这是一条编码为HTML文档的错误消息

修改代码以打印出json字符串,然后再尝试解析它

我注意到您的JSONParser类完全忽略了HTTP响应状态和响应内容类型

我以前见过这种代码;e、 和其他一些地方。它很脆弱,有一些糟糕的编码实践,我强烈建议您不要使用它

这里有三个教训:

不要复制别人的代码。你自己写吧

如果你真的复制了,请确保你是从可靠的来源获得的

如果你真的复制了,确保你彻底地检查了你复制的内容


这个问题中的代码太多了。将其简化为一个较小的工作程序,以显示您的问题。。。没有所有与按钮、对话框等无关的东西。而且,你处理抛出它们的方法中的所有异常的方法很糟糕。我编辑了这个问题。现在可以了吗?@StephenC-你现在可以看一下代码了吗?