使用facebook sdk 4.1 for android获取facebook好友
我正在开发一个android应用程序,我想在其中获取所有使用同一应用程序的朋友,使用facebook sdk 4.1,我试图查找最新教程,但没有找到任何人。。。我尝试使用GraphRequestBatch,但从未调用onCompleted,请帮助使用facebook sdk 4.1 for android获取facebook好友,android,facebook-graph-api,facebook-sdk-4.0,Android,Facebook Graph Api,Facebook Sdk 4.0,我正在开发一个android应用程序,我想在其中获取所有使用同一应用程序的朋友,使用facebook sdk 4.1,我试图查找最新教程,但没有找到任何人。。。我尝试使用GraphRequestBatch,但从未调用onCompleted,请帮助 package com.miivideos; import java.util.Arrays; import java.util.List; import org.json.JSONArray; import android.app.Progres
package com.miivideos;
import java.util.Arrays;
import java.util.List;
import org.json.JSONArray;
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.drawable.ColorDrawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.example.miivideos.R;
import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.GraphRequest;
import com.facebook.GraphRequestBatch;
import com.facebook.GraphResponse;
public class FriendList extends SherlockFragmentActivity {
private static final String TAG = "FriendList";
public static final List<String> PERMISSIONS = Arrays.asList("publish_actions", "email", "user_location","user_friends");
private CallbackManager callbackManager;
AccessToken accesstoken=AccessToken.getCurrentAccessToken();
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setContentView(R.layout.friend_list);
android.app.ActionBar ab = getActionBar();
ColorDrawable colorDrawable = new ColorDrawable(getResources()
.getColor(R.color.green));
ab.setBackgroundDrawable(colorDrawable);
callbackManager = CallbackManager.Factory.create();
new GetFriendList().execute();
}
class GetFriendList extends AsyncTask<String, String, String> {
ProgressDialog pdig = new ProgressDialog(FriendList.this);
@Override
protected String doInBackground(String... params) {
Log.i(TAG, "Working in background...");
//LoginManager.getInstance().logInWithReadPermissions(FriendList.this, Arrays.asList("user_friends"));
//Log.i(TAG,"Having token for: "+String.valueOf(AccessToken.getCurrentAccessToken().getPermissions()));
GraphRequestBatch batch = new GraphRequestBatch(
GraphRequest.newMyFriendsRequest(accesstoken,
new GraphRequest.GraphJSONArrayCallback() {
@Override
public void onCompleted(JSONArray jarray,
GraphResponse response) {
Log.i(TAG, "onCompleted: jsonArray "
+ jarray);
Log.i(TAG, "onCompleted: response "
+ response);
Toast.makeText(FriendList.this, "result:"+jarray.toString(), Toast.LENGTH_LONG).show();
}
}));
batch.addCallback(new GraphRequestBatch.Callback() {
@Override
public void onBatchCompleted(GraphRequestBatch batch) {
Log.i(TAG, "onbatchCompleted: jsonArray "
+ batch);
}
});
batch.executeAsync();
return null;
}
@Override
protected void onPostExecute(String result) {
if (pdig.isShowing())
pdig.dismiss();
super.onPostExecute(result);
}
@Override
protected void onPreExecute() {
pdig.setTitle("Fetching");
pdig.setMessage("Fetching facebook friends...");
//pdig.show();
Log.i(TAG, "Starting...");
super.onPreExecute();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
}
package com.miivideos;
导入java.util.array;
导入java.util.List;
导入org.json.JSONArray;
导入android.app.ProgressDialog;
导入android.content.Intent;
导入android.graphics.drawable.ColorDrawable;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.util.Log;
导入android.widget.Toast;
导入com.actionbarsherlock.app.SherlockFragmentActivity;
导入com.example.miivideos.R;
导入com.facebook.AccessToken;
导入com.facebook.CallbackManager;
导入com.facebook.GraphRequest;
导入com.facebook.GraphRequestBatch;
导入com.facebook.GraphResponse;
公共类好友列表扩展了SherlockFragmentActivity{
私有静态最终字符串TAG=“FriendList”;
公共静态最终列表权限=Arrays.asList(“发布操作”、“电子邮件”、“用户位置”、“用户朋友”);
私人CallbackManager CallbackManager;
AccessToken AccessToken=AccessToken.getCurrentAccessToken();
@凌驾
创建时受保护的void(包arg0){
super.onCreate(arg0);
setContentView(R.layout.friend_列表);
android.app.ActionBar ab=getActionBar();
ColorDrawable ColorDrawable=新的ColorDrawable(getResources()
.getColor(R.color.green));
ab.可拉深(可彩色拉深);
callbackManager=callbackManager.Factory.create();
新建GetFriendList().execute();
}
类GetFriendList扩展了异步任务{
ProgressDialog pdig=新建ProgressDialog(FriendList.this);
@凌驾
受保护的字符串doInBackground(字符串…参数){
Log.i(标记“在后台工作…”);
//LoginManager.getInstance().logInWithReadPermissions(FriendList.this、Arrays.asList(“用户朋友”);
//Log.i(标记,“具有令牌:”+String.valueOf(AccessToken.getCurrentAccessToken().getPermissions());
GraphRequestBatch=新GraphRequestBatch(
GraphRequest.newMyFriendsRequest(accesstoken,
新的GraphRequest.graphjRayCallback(){
@凌驾
公共空间未完成(JSONArray jarray,
GraphResponse(反应){
Log.i(标记“onCompleted:jsonArray”
+jarray);
Log.i(标记“未完成:响应”
+反应);
Toast.makeText(FriendList.this,“结果:+jarray.toString(),Toast.LENGTH\u LONG.show();
}
}));
batch.addCallback(新GraphRequestBatch.Callback(){
@凌驾
已完成批处理上的公共无效(GraphRequestBatch批处理){
Log.i(标记“onbatchCompleted:jsonArray”
+批次);
}
});
batch.executeAsync();
返回null;
}
@凌驾
受保护的void onPostExecute(字符串结果){
if(pdig.isShowing())
pdig.discouse();
super.onPostExecute(结果);
}
@凌驾
受保护的void onPreExecute(){
pdig.setTitle(“获取”);
setMessage(“获取facebook好友…”);
//pdig.show();
Log.i(标记“开始…”);
super.onPreExecute();
}
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
callbackManager.onActivityResult(请求代码、结果代码、数据);
}
}
我终于找到了如何做到这一点,但在sdk 4.1.0中,facebook将只提供正在使用您的应用程序或用户之间的常用应用程序的朋友,而不是所有的朋友列表
GraphRequestBatch batch = new GraphRequestBatch(GraphRequest.newMyFriendsRequest(
accesstoken,
new GraphRequest.GraphJSONArrayCallback() {
@Override
public void onCompleted(JSONArray jsonArray, GraphResponse response) {
System.out.println("jsonArray: "+jsonArray);
System.out.println("GraphResponse: "+response);
try {
ArrayList<Friend_List_Load> item_details = new ArrayList<Friend_List_Load>();
for(int i=0; i<jsonArray.length();i++){
JSONObject c=jsonArray.getJSONObject(i);
System.out.println("id: "+c.getString(PROFILE_ID));
System.out.println("name: "+c.getString(NAME));
FriendListAdapter frndadapter=new FriendListAdapter(FriendList.this,item_details);
item_details.add(new Friend_List_Load(c.getString(NAME),c.getString(PROFILE_ID)));
lv_friends.setAdapter(frndadapter);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}),
GraphRequest.newMeRequest(accesstoken, new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
System.out.println("meJSONObject: "+object);
System.out.println("meGraphResponse: "+response);
}
})
);
batch.addCallback(new GraphRequestBatch.Callback() {
@Override
public void onBatchCompleted(GraphRequestBatch graphRequests) {
//Log.i(TAG, "onCompleted: graphRequests "+ graphRequests);
}
});
batch.executeAsync();
GraphRequestBatch=newgraphrequestbatch(GraphRequest.newMyFriendsRequest(
accesstoken,
新的GraphRequest.graphjRayCallback(){
@凌驾
未完成公共空白(JSONArray JSONArray,图形响应){
System.out.println(“jsonArray:+jsonArray”);
System.out.println(“GraphResponse:+response”);
试一试{
ArrayList item_details=新建ArrayList();
对于(int i=0;i检查更新的文档和facebook android sdk 4.x图形api的新更改
希望这会有帮助。这应该行得通
而且,如前所述,只返回共享的朋友,加上您的朋友总数
private void getFriends() {
AccessToken accesstoken = AccessToken.getCurrentAccessToken();
GraphRequest.newMyFriendsRequest(accesstoken,
new GraphRequest.GraphJSONArrayCallback() {
@Override
public void onCompleted(JSONArray jsonArray, GraphResponse response) {
System.out.println("jsonArray: " + jsonArray);
System.out.println("GraphResponse: " + response);
}
}).executeAsync();
}
嘿,我正在使用上面的代码。完全相同,但在完成时从不调用,,,知道为什么吗?从你的facbook帐户在应用程序设置中检查你的权限,如果没有权限查看朋友列表等,那么该方法将无法执行,因此将永远不会完成。。。。