I am developing app using eclipse ADT. I am trying to login and get user data in facebook. I can login with facebook but i am unable to retrieve the user data. here i wrote a method
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());
}
}
this is method is working upto if (!mFacebook.isSessionValid())
this if condition and i can get the true value, but my problem is, the onComplete() method is not working. If its work, i doing doinbackground operation for starting new page. How i can solve this issue
Thanks in advance
使用socialauth-android,简单又快速https://code.google.com/p/socialauth-android/
Just check your logcat for any NullPointerException
if your values of id, name,gender ... are coming in JSON Object.If NO then first handle this like this
id=me.getString("id")==null ? "":me.getString("id");
or
if(me.getString("id")==null)
{
id = "";
}else
{
id=me.getString("id");
}
make one more dialog and use it in else part of 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);
}
}
});
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.