[英]Android Login facebook integration
我正在使用Eclipse ADT开发应用程序。 我正在尝试登录并在Facebook中获取用户数据。 我可以用Facebook登录,但无法检索用户数据。 在这里我写了一个方法
public void loginFacebook() {
Log.d("Login Facebooktest Sessions", "loginfb called");
mPrefs = getActivity().getPreferences(0);
access_token = mPrefs.getString("access_token", null);
long expires = mPrefs.getLong("access_expires", 0);
if (access_token != null) {
mFacebook.setAccessToken(access_token);
Log.d("Facebooktest Sessions", "" + mFacebook.isSessionValid());
}
if (expires != 0) {
mFacebook.setAccessExpires(expires);
}
if (!mFacebook.isSessionValid()) {
Log.d("login Facebooktest Sessions",
"" + !mFacebook.isSessionValid());
mFacebook.authorize(getActivity(), new String[] {},
new DialogListener() {
@Override
public void onFacebookError(FacebookError e) {
// TODO Auto-generated method stub
Log.d("login Facebooktest onFacebookError", "" + e);
}
@Override
public void onError(DialogError e) {
// TODO Auto-generated method stub
Log.d("login Facebooktest onError ", "" + e);
}
@Override
public void onComplete(Bundle values) {
// TODO Auto-generated method stub
Log.d("login Facebooktest bundle", "" + values);
try {
JSONObject me = new JSONObject(mFacebook
.request("me"));
SharedPreferences.Editor editor = mPrefs.edit();
id = me.getString("id");
name = me.getString("name");
email = me.getString("email");
gender = me.getString("gender");
try {
imageLink = new URL(
"https://graph.facebook.com/" + id
+ "/picture?type=large");
Bitmap bmp = null;
try {
bmp = BitmapFactory
.decodeStream(imageLink
.openConnection()
.getInputStream());
} catch (IOException e) {
e.printStackTrace();
Log.e("facebook complete IO error ", ""
+ e);
}
proPic.setImageBitmap(bmp);
} catch (MalformedURLException e) {
e.printStackTrace();
Log.e("facebook complete image error ", ""
+ e);
}
Log.d("facebook.getAccessToken()", "" + id
+ mFacebook.getAccessToken());
editor.putString("userid", id);
editor.putString("access_token",
mFacebook.getAccessToken());
editor.putLong("access_expires",
mFacebook.getAccessExpires());
editor.commit();
new getFacebookData(id, name, email, gender)
.execute();
// getProfileInformation();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
Log.e("login facebook complete error ", "" + e);
}
}
@Override
public void onCancel() {
// TODO Auto-generated method stub
Log.d("login Facebooktest onCancel", "onCancel");
}
});
} else {
Log.d("login Facebook login method",
"" + mFacebook.isSessionValid());
}
}
这是方法是否工作到if (!mFacebook.isSessionValid())
这个条件条件,我可以得到真实的值,但是我的问题是,onComplete()方法无法工作。 如果它的工作,我做开始新页面的doinbackground操作。 我该如何解决这个问题
提前致谢
使用socialauth-android,简单又快速https://code.google.com/p/socialauth-android/
如果您的id,name,gender ...的值包含在JSON Object中,只需检查您的logcat是否存在NullPointerException
如果否,则首先像这样处理
id=me.getString("id")==null ? "":me.getString("id");
要么
if(me.getString("id")==null)
{
id = "";
}else
{
id=me.getString("id");
}
再创建一个对话框并将其用于if (!mFacebook.isSessionValid())
其他部分:
else
{
facebook.dialog(this, "feed", new DialogListener(){
@Override
public void onComplete(Bundle values) {
// TODO Auto-generated method stub
Log.d("login Facebooktest bundle", "" + values);
try {
JSONObject me = new JSONObject(mFacebook
.request("me"));
SharedPreferences.Editor editor = mPrefs.edit();
id = me.getString("id");
name = me.getString("name");
email = me.getString("email");
gender = me.getString("gender");
try {
imageLink = new URL(
"https://graph.facebook.com/" + id
+ "/picture?type=large");
Bitmap bmp = null;
try {
bmp = BitmapFactory
.decodeStream(imageLink
.openConnection()
.getInputStream());
} catch (IOException e) {
e.printStackTrace();
Log.e("facebook complete IO error ", ""
+ e);
}
proPic.setImageBitmap(bmp);
} catch (MalformedURLException e) {
e.printStackTrace();
Log.e("facebook complete image error ", ""
+ e);
}
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.