0

I want to fetch json data from this link: link

& here is my code for that:

private static String url = "https://graph.facebook.com/fql?q=SELECT%20url,%20normalized_url,%20share_count,%20like_count,%20comment_count,%20total_count,%20commentsbox_count,%20comments_fbid,%20click_count%20FROM%20link_stat%20WHERE%20url=%27https://www.facebook.com/BillionHands%27";
// JSON Node names
private static final String TAG_DATA = "data";
private static final String TAG_SHARE = "share_count";
private static final String TAG_LIKE = "like_count";
private TextView LikeTv;
public String like;
JSONArray data = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_about_us);
 StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
 StrictMode.setThreadPolicy(policy);
 // Creating JSON Parser instance
 JSONParser jParser = new JSONParser();
 // getting JSON string from URL
 JSONObject json = jParser.getJSONFromUrl(url);
 try {
 // Getting Array of Contacts
 data = json.getJSONArray(TAG_DATA);
 JSONObject c = data.getJSONObject(0);
 // Storing each json item in variable
 String share = c.getString(TAG_SHARE);
 like = c.getString(TAG_LIKE);
 Log.i("Like Count",like);
 } catch (JSONException e) {
 e.printStackTrace();
 }
 LikeTv = (TextView) findViewById(R.id.tvLike);
 LikeTv.setText(like);

Now I am getting "JSONException: no value for data" Please help... whats wrong in my code..

Denys Séguret
384k90 gold badges813 silver badges780 bronze badges
asked Mar 5, 2013 at 9:37
2
  • You should always precise the language you use (java I guess) and where you get the exception. Commented Mar 5, 2013 at 9:39
  • Ohh..... sorry sorry..!! I am fetching data in my android application where I need to get the "like_count" for this particular page. & I am getting error on this line "data = json.getJSONArray(TAG_DATA); " Commented Mar 5, 2013 at 9:42

2 Answers 2

1

Well....
I got your problem solution...
The method you wrote getJSONFromUrl()..
I am sure it contains HttpPost object..
change that to HttpGet and it will start working...

EDIT

Here is the code I tried with

public class MainActivity extends Activity {
 private static String url = "https://graph.facebook.com/fql?q=SELECT%20url,%20normalized_url,%20share_count,%20like_count,%20comment_count,%20total_count,%20commentsbox_count,%20comments_fbid,%20click_count%20FROM%20link_stat%20WHERE%20url=%27https://www.facebook.com/BillionHands%27";
 // JSON Node names
 private static final String TAG_DATA = "data";
 private static final String TAG_SHARE = "share_count";
 private static final String TAG_LIKE = "like_count";
 private TextView LikeTv;
 public String like;
 JSONArray data = null;
 @SuppressLint("NewApi")
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
 StrictMode.setThreadPolicy(policy);
 // Creating JSON Parser instance
 JSONParser jParser = new JSONParser();
 // getting JSON string from URL
 JSONObject json = jParser.getJSONfromURL(url);
 try {
 // Getting Array of Contacts
 Log.d("JSON ","DATA "+json);
 data = json.getJSONArray(TAG_DATA);
 JSONObject c = data.getJSONObject(0);
 // Storing each json item in variable
 String share = c.getString(TAG_SHARE);
 like = c.getString(TAG_LIKE);
 Log.i("Like Count",like);
 } catch (JSONException e) {
 e.printStackTrace();
 }
 }
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
 // Inflate the menu; this adds items to the action bar if it is present.
 getMenuInflater().inflate(R.menu.activity_main, menu);
 return true;
 }
}
class JSONParser
{
 public JSONObject getJSONfromURL(String url) {
 InputStream is = null;
 String result = "";
 JSONObject jArray = null;
 // http post
 try {
 HttpClient httpclient = new DefaultHttpClient();
 HttpGet httpget = new HttpGet(url);
 HttpResponse response = httpclient.execute(httpget);
 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);
 StringBuilder 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 get data string ",
 "Error converting result " + e.toString());
 }
 try {
 jArray = new JSONObject(result);
 } catch (JSONException e) {
 Log.e("log_tag create object ",
 "Error parsing data " + e.toString());
 }
 return jArray;
}
}
answered Mar 5, 2013 at 12:15
Sign up to request clarification or add additional context in comments.

1 Comment

Oh my god...!!! Oh my god..!! It worked..!!! :) Thank you very much buddy, you just made my day..!!! :) :)
0

The "data" element in your JSON isn't an array, it is a JSONobject. So instead of:

JSONArray data = json.getJSONArray(TAG_DATA);

Try this:

JSONObject data = json.getJSONObject(TAG_DATA);

From the JSONObject, you can get items like TAG_SHARE and TAG_LIKE.

Good luck!

answered Mar 5, 2013 at 9:59

1 Comment

Thanks for the help but it didn't work... :( Still getting same exception but now on line "JSONObject data = json.getJSONObject(TAG_DATA);"...

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.