I am using the new Facebook-sdk
and using the hackbook example to get the list of friends using FriendsList.java
file. The Friendlist Activit
I didnt post any code because I was using the example code of Facebook sdk available at Facebook - Hackbook example for Android. Finally I found the issue and solved it.
First the issue is not in facebook sdk but with the size of the response. If you have more than 4k friends in facebook and you query for the friends list using fql.query or graph methods then the Json response size is more than 500kb. Now if you try to pass this 500kb response via IPC (Intent extra data) to another activity the process failed with reason !! Failed binder transaction !! More info on Failed binder transaction can be found at Failed binder transaction discussion
How I solved this issue: I used the same procedure as used in the link I have posted above. I.e. writing the response to a file and sending the file link to the other activity instead of the full 500kb size response.
Following code work better for me. This code provide friend list.
public JSONObject getFrienList(String token)
{
InputStream is = null;
String result = "";
JSONObject jArray = null;
try
{
HttpClient httpclient = new DefaultHttpClient();
HttpGet httppost = new HttpGet("https://graph.facebook.com/me/friends? access_token=" + token);
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}
catch(Exception e)
{
Log.e("ERROR", "Error in http connection "+e.toString());
}
//convert response to string
try
{
BufferedReader reader = new BufferedReader(new InputStreamReader(is),8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null)
{
sb.append(line + "\n");
}
is.close();
result=sb.toString();
Log.i("RESULT",result);
}
catch(Exception e)
{
Log.e("ERROR", "Error converting result "+e.toString());
}
//try parse the string to a JSON object
try
{
jArray = new JSONObject(result);
Log.i("RESULT","JSON ARRAY"+jArray.toString());
}
catch(JSONException e)
{
Log.e("ERROR", "Error parsing data "+e.toString());
}
return jArray;
}
What are you doing right now I don't know..cause you didn't posted any code..but this is how I got friend-list.
HttpGet httpget = new HttpGet("https://graph.facebook.com/me/friends?access_token=" + mAccessToken);
HttpResponse response;
try
{
response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
if (entity != null)
{
result = EntityUtils.toString(entity);
Log.i("Request String",result);
parseJSON(result);
}
}
catch (Exception e) {
e.printStackTrace();
}
private void parseJSON(String data1)
{
try{
JSONObject jObj = new JSONObject(data1);if(jObj==null) Log.i("-----------","JOBJ IS NULL");
JSONArray jObjArr= jObj.optJSONArray("data");if(jObjArr==null) Log.i("-----------","JOBJARR IS NULL");
int lon = jObjArr.length();
String frnd_data[][] = new String[jObjArr.length()][2];
entity1 = new String[jObjArr.length()];
Log.i("Frineds >>", "" + lon);
for(int i = 0 ;i< lon; i++)
{
JSONObject tmp = jObjArr.optJSONObject(i);
frnd_data[i][0]=tmp.getString("name");
frnd_data[i][1]=tmp.getString("id");
Log.i("Name", frnd_data[i][0]);
Log.i("Name AND Id" , frnd_data[i][0] +" "+ frnd_data[i][1]);
entity1[i] = getFriend("https://graph.facebook.com/"+frnd_data[i][1]+"?access_token="+mAccessToken);
}
}
catch (Exception e)
{
Log.i("Exception1 >> ", e.toString());
}
}
public String getFriend(String tmpurl)
{
HttpClient httpclient = new DefaultHttpClient();
String temp_result = null;
HttpGet httpget = new HttpGet(tmpurl);
HttpResponse response;
try
{
response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
if (entity != null)
{
temp_result = EntityUtils.toString(entity);
Log.i("Request String",temp_result);
return temp_result;
}
}
catch (Exception e)
{
e.printStackTrace();
}
return temp_result;
}