t android.os.Build; 导入android.os.Bundle; 导入android.support.v7.app.AppActivity; 导入android.support.v7.widget.Toolbar; 导入android.ut
t android.os.Build; 导入android.os.Bundle; 导入android.support.v7.app.AppActivity; 导入android.support.v7.widget.Toolbar; 导入android.util.Log; 导入android.view.MenuItem; 导入android.view.view; 导入android.widget.Button; 导入android.widget.ListView; 导入android.widget.TextView; 导入android.widget.Toast; 导入com.facebook.HttpMethod; 导入com.facebook.Request; 导入com.facebook.RequestBatch; 导入com.facebook.Response; 导入com.facebook.Session; 导入com.facebook.sessionDefaultAcademy; 导入com.facebook.SessionLoginBehavior; 导入com.facebook.SessionState; 导入com.facebook.internal.SessionTracker; 导入com.facebook.internal.Utility; 导入com.facebook.model.GraphObject; 导入com.facebook.model.GraphUser; 导入org.json.JSONArray; 导入org.json.JSONException; 导入org.json.JSONObject; 导入java.io.IOException; 导入java.util.ArrayList; 导入java.util.array; 导入java.util.HashMap; 导入java.util.Map; 导入Info.InfoUsers; 导入india.application.upflair.Adapter.findpeopleadter; 进口印度.application.upflair.R; 导入utills.ConnectionDetector; 输入utills.常数; 公共类FacebookFriendListActivity扩展了AppCompatActivity{ //facebook部分 SessionTracker mSessionTracker; 会话mCurrentSession=null; 字符串facebook\u id; @凌驾 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.listview); 使用Facebook()登录; } /*** *facebook部分获取好友列表 */ 使用Facebook()进行私有无效登录{ mSessionTracker=new SessionTracker(getBaseContext(),new Session.StatusCallback()){ @凌驾 公共无效调用(会话、会话状态、异常){ //待办事项。。 } }, 空,假); 字符串applicationId=Utility.getMetadataApplicationId(getBaseContext()); mCurrentSession=mSessionTracker.getSession(); mSessionTracker.setSession(空); Session Session=new Session.Builder(getBaseContext()).setApplicationId(applicationId.build(); Session.setActiveSession(Session); mCurrentSession=会话; 如果(!mCurrentSession.isOpened()){ Session.OpenRequest OpenRequest=null; openRequest=newsession.openRequest(FacebookFriendListActivity.this); if(openRequest!=null){ openRequest.setDefaultAudience(SessionDefaultAudience.FRIENDS); openRequest.setPermissions(Arrays.asList(“用户生日”、“电子邮件”、“用户位置”、“用户朋友”)); openRequest.setLoginBehavior(SessionLoginBehavior.SSO_和_回退); openForRead(openRequest); accessFacebookUserInfo(); } }否则{ accessFacebookUserInfo(); } } 请求friendListRequest=null; 私有void accessFacebookUserInfo(){ if(Session.getActiveSession()!=null&Session.getActiveSession().isOpened()){ Request cover\u Request=new Request(Session.getActiveSession(),“me”,null,HttpMethod.GET,new Request.Callback()){ @凌驾 未完成公共无效(响应){} }); executeBatchAsync(覆盖请求); Request-meRequest=Request.newMeRequest(Session.getActiveSession(),newrequest.GraphUserCallback()){ @凌驾 未完成公共无效(GraphUser用户,响应){ 试一试{ friendListRequest.executeAsync(); }捕获(异常jex){ printStackTrace(); } } }); RequestBatch RequestBatch=新的RequestBatch(MereRequest); addCallback(新的requestBatch.Callback(){ @凌驾 public void onBatchCompleted(RequestBatch){} }); requestBatch.executeAsync(); friendListRequest=新请求(Session.getActiveSession(),“/me/friends”,null,HttpMethod.GET,new Request.Callback(){ @凌驾 未完成公共无效(响应){ 试一试{ GraphObject graphObj=response.getGraphObject(); if(graphObj!=null){ JSONObject jsonObj=graphObj.getInnerJSONObject(); JSONArray data=jsonObj.getJSONArray(“数据”); if(data.length()>0&&data!=null) {t android.os.Build; 导入android.os.Bundle; 导入android.support.v7.app.AppActivity; 导入android.support.v7.widget.Toolbar; 导入android.ut,android,facebook,facebook-graph-api,facebook-android-sdk,Android,Facebook,Facebook Graph Api,Facebook Android Sdk,t android.os.Build; 导入android.os.Bundle; 导入android.support.v7.app.AppActivity; 导入android.support.v7.widget.Toolbar; 导入android.util.Log; 导入android.view.MenuItem; 导入android.view.view; 导入android.widget.Button; 导入android.widget.ListView; 导入android.widget
对于(int i=0;i您是否尝试过不设置任何参数?默认情况下,id和名称都在那里,因此您不必请求它们。我认为“friends”不是有效字段。请尝试将捆绑包和setParameters一起删除,只需调用friendRequest.executeAsync().@MingLi可以很好地处理您的观察结果。我的目的是为他们中的每一个人获取好友列表和个人资料图像。为此,我认为我需要将一个参数传递到一个包中。如果这是真的,我需要传递什么参数?看,就像我说的,facebook对这种类型的文档很差。那么您想要的是“字段”的“id、名称、图片”参数。您还可以转到以快速尝试查询(在本例中,我使用了/me/friends?fields=id、name、picture)@MingLi好的,效果很好。听起来你已经解决了你的问题,我可以问你如何修改你的代码来让它工作吗?有没有办法获得朋友的名字和姓氏,将字段:first_name和last_name添加到query@ignacio_gs我怎样才能收到我朋友的电子邮件?试着用这个可以解决
params.putString(“字段”,“id、名字、姓氏、图片”);
@proGamer替换为使用Request.newMyFriends
{Response: responseCode: 500, graphObject: null, error: {HttpStatus: 500, errorCode: 100, errorType: FacebookApiException, errorMessage: Unsupported operation}, isFromCache:false}
private void onSessionStateChange(final Session session, SessionState sessionState, Exception ex){
if(session != null && session.isOpened()){
getUserData(session);
}
}
private void getUserData(final Session session){
Request request = Request.newMeRequest(session,
new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
if(user != null && session == Session.getActiveSession()){
pictureView.setProfileId(user.getId());
userName.setText(user.getName());
getFriends();
}
if(response.getError() !=null){
}
}
});
request.executeAsync();
}
private void getFriends(){
Session activeSession = Session.getActiveSession();
if(activeSession.getState().isOpened()){
Request friendRequest = Request.newMyFriendsRequest(activeSession,
new GraphUserListCallback(){
@Override
public void onCompleted(List<GraphUser> users,
Response response) {
Log.i("INFO", response.toString());
}
});
Bundle params = new Bundle();
params.putString("fields", "id,name,friends");
friendRequest.setParameters(params);
friendRequest.executeAsync();
}
}
params.putString("fields", "id,name,friends");
params.putString("fields", "id, name, picture");
String fqlQuery = "SELECT uid,name,pic_square FROM user WHERE uid IN " +
"(SELECT uid2 FROM friend WHERE uid1 = me())";
Bundle params = new Bundle();
params.putString("q", fqlQuery);
Session session = Session.getActiveSession();
Request request = new Request(session,
"/fql",
params,
HttpMethod.GET,
new Request.Callback(){
public void onCompleted(Response response) {
Log.i(TAG, "Result: " + response.toString());
try{
GraphObject graphObject = response.getGraphObject();
JSONObject jsonObject = graphObject.getInnerJSONObject();
Log.d("data", jsonObject.toString(0));
JSONArray array = jsonObject.getJSONArray("data");
for(int i=0;i<array.length();i++){
JSONObject friend = array.getJSONObject(i);
Log.d("uid",friend.getString("uid"));
Log.d("name", friend.getString("name"));
Log.d("pic_square",friend.getString("pic_square"));
}
}catch(JSONException e){
e.printStackTrace();
}
}
});
Request.executeBatchAsync(request);
params.putString("fields", "id, first_name, last_name, picture");
private void onSessionStateChange(Session session, SessionState state,
Exception exception) {
if (state.isOpened()) {
Log.i(TAG, "Logged in...");
Request.executeMyFriendsRequestAsync(session,
new GraphUserListCallback() {
@Override
public void onCompleted(List<GraphUser> users,
Response response) {
Log.i("Response JSON", response.toString());
names = new String[users.size()];
id = new String[users.size()];
for (int i=0; i<users.size();i++){
names[i] = users.get(i).getName();
id[i]= users.get(i).getId();
}
}
});
} else if (state.isClosed()) {
Log.i(TAG, "Logged out...");
}
}
// @Deprecated
// Request.executeMyFriendsRequestAsync()
// Use this instead:
Request.newMyFriendsRequest(session, new GraphUserListCallback() {
@Override
public void onCompleted(List<GraphUser> users, Response response)
{
if(response.getError() == null)
{
for (int i = 0; i < users.size(); i++) {
Log.e("users", "users " + users.get(i).getName());
}
}
else
{
Toast.makeText(MainActivity.this,
response.getError().getErrorMessage(),
Toast.LENGTH_SHORT).show();
}
}
});
package com.application.Activity;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.facebook.HttpMethod;
import com.facebook.Request;
import com.facebook.RequestBatch;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.SessionDefaultAudience;
import com.facebook.SessionLoginBehavior;
import com.facebook.SessionState;
import com.facebook.internal.SessionTracker;
import com.facebook.internal.Utility;
import com.facebook.model.GraphObject;
import com.facebook.model.GraphUser;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import Info.InfoUsers;
import india.application.upflair.Adapter.FindPeopleAdapter;
import india.application.upflair.R;
import utills.ConnectionDetector;
import utills.Constant;
public class FacebookFriendListActivity extends AppCompatActivity {
//facebook section
SessionTracker mSessionTracker;
Session mCurrentSession = null;
String facebook_id;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listview);
signInWithFacebook();
}
/***
* facebook section to get friend list
*/
private void signInWithFacebook() {
mSessionTracker = new SessionTracker(getBaseContext(), new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
//TODO..
}
},
null, false);
String applicationId = Utility.getMetadataApplicationId(getBaseContext());
mCurrentSession = mSessionTracker.getSession();
mSessionTracker.setSession(null);
Session session = new Session.Builder(getBaseContext()).setApplicationId(applicationId).build();
Session.setActiveSession(session);
mCurrentSession = session;
if (!mCurrentSession.isOpened()) {
Session.OpenRequest openRequest = null;
openRequest = new Session.OpenRequest(FacebookFriendListActivity.this);
if (openRequest != null) {
openRequest.setDefaultAudience(SessionDefaultAudience.FRIENDS);
openRequest.setPermissions(Arrays.asList("user_birthday", "email", "user_location", "user_friends"));
openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
mCurrentSession.openForRead(openRequest);
accessFacebookUserInfo();
}
} else {
accessFacebookUserInfo();
}
}
Request friendListRequest = null;
private void accessFacebookUserInfo() {
if (Session.getActiveSession() != null & Session.getActiveSession().isOpened()) {
Request cover_request = new Request(Session.getActiveSession(), "me", null, HttpMethod.GET, new Request.Callback() {
@Override
public void onCompleted(Response response) {}
});
Request.executeBatchAsync(cover_request);
Request meRequest = Request.newMeRequest(Session.getActiveSession(),new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
try {
friendListRequest.executeAsync();
} catch (Exception jex) {
jex.printStackTrace();
}
}
});
RequestBatch requestBatch = new RequestBatch(meRequest);
requestBatch.addCallback(new RequestBatch.Callback() {
@Override
public void onBatchCompleted(RequestBatch batch) {}
});
requestBatch.executeAsync();
friendListRequest = new Request(Session.getActiveSession(), "/me/friends", null, HttpMethod.GET, new Request.Callback() {
@Override
public void onCompleted(Response response) {
try {
GraphObject graphObj = response.getGraphObject();
if (graphObj != null) {
JSONObject jsonObj = graphObj.getInnerJSONObject();
JSONArray data=jsonObj.getJSONArray("data");
if(data.length()>0 && data!=null)
{
for(int i=0;i<data.length();i++)
{
JSONObject dataobj= data.getJSONObject(i);
String name=dataobj.getString("name");
String id=dataobj.getString("id");
System.out.println("name==============" + name);
System.out.println("id==============" + id);
facebooklist.add(id);
facebook_id = facebooklist.toString().replace("[", "");
facebook_id = facebook_id.replace("]", "");
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
if (mCurrentSession.isOpened()) {
accessFacebookUserInfo();
}
else {
Toast.makeText(mContext, "some thing went wrong plz try later", Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(mContext, "some thing went wrong plz try later", Toast.LENGTH_LONG).show();
mCurrentSession = null;
mSessionTracker.setSession(null);
}
}
}