我已经下载了最新的Facebook SDK,我试图获取用户信息session.isOpened()
始终为假,有人可以帮忙吗?
这是我的代码:
public class MainActivity extends Activity {
Button login;
TextView name;
TextView email;
ImageView profile;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// // Add code to print out the key hash
// try {
// PackageInfo info = getPackageManager().getPackageInfo(
// "com.actelme.testfacebook", PackageManager.GET_SIGNATURES);
// for (Signature signature : info.signatures) {
// MessageDigest md = MessageDigest.getInstance("SHA");
// md.update(signature.toByteArray());
// Log.d("KeyHash:",
// Base64.encodeToString(md.digest(), Base64.DEFAULT));
// }
// } catch (NameNotFoundException e) {
//
// } catch (NoSuchAlgorithmException e) {
//
// }
login = (Button) findViewById(R.id.login);
name = (TextView) findViewById(R.id.name);
email = (TextView) findViewById(R.id.email);
profile = (ImageView) findViewById(R.id.picture);
login.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// start Facebook Login
Session.openActiveSession(MainActivity.this, true,
new Session.StatusCallback() {
// callback when session changes state
@Override
public void call(Session session,
SessionState state, Exception exception) {
if (session.isOpened()) {
// make request to the /me API
Request.newMeRequest(session,
new Request.GraphUserCallback() {
// callback after Graph API
// response with user object
@Override
public void onCompleted(
GraphUser user,
Response response) {
if (user != null) {
name.setText(name
.getText()
+ " "
+ user.getName()
+ "!");
email.setText(email
.getText()
+ " "
+ user.asMap()
.get("email")
.toString());
profile.setImageBitmap(getUserPic(user
.getId()));
}
}
}).executeAsync();
}
}
});
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode,
resultCode, data);
}
public Bitmap getUserPic(String userID) {
String imageURL;
Bitmap bitmap = null;
imageURL = "http://graph.facebook.com/" + userID
+ "/picture?type=small";
try {
bitmap = BitmapFactory.decodeStream((InputStream) new URL(imageURL)
.getContent());
} catch (Exception e) {
Log.d("TAG", "Loading Picture FAILED");
e.printStackTrace();
}
return bitmap;
}
编辑我已经应用了您的代码,但仍无法正常工作
public class MainActivity extends Activity {
Session session;
TextView name;
TextView email;
ImageView profile;
StatusCallback statusCallback = (new StatusCallback() {
@SuppressWarnings("deprecation")
@Override
public void call(final Session session, SessionState state,
Exception exception) {
if (session.isOpened()) {
Request.executeMeRequestAsync(session, new GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
name.setText(name.getText() + " " + user.getName()
+ "!");
email.setText(email.getText() + " "
+ user.asMap().get("email").toString());
profile.setImageBitmap(getUserPic(user.getId()));
}
}
});
}
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
session = Session.getActiveSession();
if (session == null) {
if (savedInstanceState != null) {
Log.d("TAG", "Restoring session");
session = Session.restoreSession(getApplicationContext(), null,
statusCallback, savedInstanceState);
}
if (session == null) {
Log.d("TAG", "Creating new session");
session = new Session(getApplicationContext());
}
Log.d("TAG", "Active session");
Session.setActiveSession(session);
} else {
Log.d("TAG", "Session is null --> " + session.getState().toString());
}
name = (TextView) findViewById(R.id.name);
email = (TextView) findViewById(R.id.email);
profile = (ImageView) findViewById(R.id.picture);
LoginButton authButton = (LoginButton) findViewById(R.id.login_button);
authButton.setOnErrorListener(new OnErrorListener() {
@Override
public void onError(FacebookException error) {
Log.d("TAG", "Error: " + error.getMessage() + " Cause: "
+ error.getCause());
}
});
authButton.setReadPermissions(Arrays.asList("basic_info", "email"));
authButton.setSessionStatusCallback(statusCallback);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode,
resultCode, data);
}
public Bitmap getUserPic(String userID) {
String imageURL;
Bitmap bitmap = null;
imageURL = "http://graph.facebook.com/" + userID
+ "/picture?type=small";
try {
bitmap = BitmapFactory.decodeStream((InputStream) new URL(imageURL)
.getContent());
} catch (Exception e) {
Log.d("TAG", "Loading Picture FAILED");
e.printStackTrace();
}
return bitmap;
}
}
EDIT2
我使用此代码作为教程生成了密钥哈希,然后将其添加到我的应用设置
// Add code to print out the key hash
try {
PackageInfo info = getPackageManager().getPackageInfo(
"com.facebook.samples.hellofacebook",
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
答案 0 :(得分:0)
使用本机登录facebok。
按钮xml
<com.facebook.widget.LoginButton
android:id="@+id/login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="14dp" />
登录活动代码:
LoginButton authButton = (LoginButton) findViewById(R.id.login_button);
authButton.setOnErrorListener(new OnErrorListener() {
@Override
public void onError(FacebookException error) {
DebugLog.log("Error: " + error.getMessage() + " Cause: " + error.getCause());
}
});
authButton.setReadPermissions(Arrays.asList("basic_info", "email"));
authButton.setSessionStatusCallback(new StatusCallback() {
@SuppressWarnings("deprecation")
@Override
public void call(final Session session, SessionState state, Exception exception) {
if (session.isOpened()) {
Request.executeMeRequestAsync(session, new GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
// Your code
}
}
});
}
}
});
控制会话的代码:
session = Session.getActiveSession();
if (session == null) {
if (savedInstanceState != null) {
DebugLog.log("Restoring session");
session = Session.restoreSession(getApplicationContext(), null, statusCallback, savedInstanceState);
}
if (session == null) {
DebugLog.log("Creating new session");
session = new Session(getApplicationContext());
}
DebugLog.log("Active session");
Session.setActiveSession(session);
} else {
DebugLog.log("Session is null --> " + session.getState().toString());
}
希望能帮到你