Android 请求数据(); share.setVisibility(View.VISIBLE); details.setVisibility(View.VISIBLE); } } @凌驾 公开作废{ } @凌驾 public void onError(facebook异常){ } }); } public void RequestData(){ GraphRequest request=GraphRequest.NewMereRequest(AccessToken.getCurrentAccessToken(),new GraphRequest.GraphJSONObjectCallback()){ @凌驾 未完成公共无效(JSONObject对象,GraphResponse响应){ JSONObject json=response.getJSONObject(); 试一试{ if(json!=null){ String text=“Name:”+json.getString(“Name”)+”电子邮件:“+json.getString(“Email”)+”配置文件链接:“+json.getString(“link”); details_txt.setText(Html.fromHtml(text)); setProfileId(json.getString(“id”); } }捕获(JSONException e){ e、 printStackTrace(); } } }); Bundle参数=新Bundle(); putString(“字段”、“id、名称、链接、电子邮件、图片”); 请求。设置参数(参数); request.executeAsync(); } @凌驾 受保护的void onActivityResult(int请求代码、int结果代码、意图数据){ super.onActivityResult(请求代码、结果代码、数据); callbackManager.onActivityResult(请求代码、结果代码、数据); } }
以下是解决方案:Android 请求数据(); share.setVisibility(View.VISIBLE); details.setVisibility(View.VISIBLE); } } @凌驾 公开作废{ } @凌驾 public void onError(facebook异常){ } }); } public void RequestData(){ GraphRequest request=GraphRequest.NewMereRequest(AccessToken.getCurrentAccessToken(),new GraphRequest.GraphJSONObjectCallback()){ @凌驾 未完成公共无效(JSONObject对象,GraphResponse响应){ JSONObject json=response.getJSONObject(); 试一试{ if(json!=null){ String text=“Name:”+json.getString(“Name”)+”电子邮件:“+json.getString(“Email”)+”配置文件链接:“+json.getString(“link”); details_txt.setText(Html.fromHtml(text)); setProfileId(json.getString(“id”); } }捕获(JSONException e){ e、 printStackTrace(); } } }); Bundle参数=新Bundle(); putString(“字段”、“id、名称、链接、电子邮件、图片”); 请求。设置参数(参数); request.executeAsync(); } @凌驾 受保护的void onActivityResult(int请求代码、int结果代码、意图数据){ super.onActivityResult(请求代码、结果代码、数据); callbackManager.onActivityResult(请求代码、结果代码、数据); } },android,facebook,android-sqlite,Android,Facebook,Android Sqlite,以下是解决方案: 无论如何,如果用户从设置中清除数据,您的数据库将被清空。关于如何完成此操作,有两种方案 首先:您允许用户通过facebook登录,并将其访问令牌(由facebook提供)存储在SharedReferences中,并在用户每次返回应用程序时检查SharedReferences。 在这里,访问令牌的过期由facebook负责,所以您不会感到头痛 第二步:在您的后端,使用facebook的访问令牌,并将其替换为您生成的访问令牌,在这里,您负责远程服务器上令牌的过期 然而,在这两种情
无论如何,如果用户从设置中清除数据,您的数据库将被清空。关于如何完成此操作,有两种方案 首先:您允许用户通过facebook登录,并将其访问令牌(由facebook提供)存储在
SharedReferences
中,并在用户每次返回应用程序时检查SharedReferences
。
在这里,访问令牌的过期由facebook负责,所以您不会感到头痛
第二步:在您的后端,使用facebook的访问令牌,并将其替换为您生成的访问令牌,在这里,您负责远程服务器上令牌的过期
然而,在这两种情况下,访问令牌都存储在您的SharedReferences
中,或者即使您将其存储在sqlite
local db中(您不应该这样),在清除设置中的app数据时,您的SharedReferences
和sqlite
db都被清除,所以无法确认用户的身份。
因此,用户必须再次登录,这一点也不坏&应该允许用户再次登录。谢谢您的回答。这有助于我保存电子邮件和用户ID。但是,如何在成功登录时转到其他布局以显示配置文件?成功登录后,您可以将值存储在共享首选项或数据库中,并显示在其他页面上。对于配置文件图片,您可以使用:
profilePictureView.setProfileId(fb\u user\u id)
这将直接在Facebook ProfilePictureView widgetSo中显示配置文件图片,我是否应该在fbloginBtn.setonclicklistener中添加该意图?我很抱歉问你,因为这对我来说很新鲜@您可以使用intent on updateUI()方法,因此在成功登录后,用户将被重定向到新活动,即使您可以在数据存储到数据库后重定向private void updateUI(){Session Session=Session.getActiveSession();boolean enableButtons=(Session!=null&&Session.isOpened());if(enableButtons&&user!=null){Intent i=newintent(getApplicationContext(),MainActivity.class);startActivity(i);}
。谢谢你的回复。你让我开心@浪人。
public class SQLiteHandler extends SQLiteOpenHelper {
private static final String TAG = SQLiteHandler.class.getSimpleName();
// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = "android_api";
// Login table name
private static final String TABLE_USER = "user";
// Login Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_EMAIL = "email";
private static final String KEY_UID = "uid";
public SQLiteHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_USER + "("
+ KEY_ID + " INTEGER PRIMARY KEY,"
+ KEY_EMAIL + " TEXT UNIQUE," + KEY_UID + " TEXT"+")";
db.execSQL(CREATE_LOGIN_TABLE);
Log.d(TAG, "Database tables created");
}
// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + TABLE_USER);
// Create tables again
onCreate(db);
}
/**
* Storing user details in database
* */
public void addUser(String name, String email, String uid, String created_at) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_EMAIL, email); // Email
values.put(KEY_UID, uid); // Email
// Inserting Row
long id = db.insert(TABLE_USER, null, values);
db.close(); // Closing database connection
Log.d(TAG, "New user inserted into sqlite: " + id);
}
/**
* Getting user data from database
* */
public HashMap<String, String> getUserDetails() {
HashMap<String, String> user = new HashMap<String, String>();
String selectQuery = "SELECT * FROM " + TABLE_USER;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// Move to first row
cursor.moveToFirst();
if (cursor.getCount() > 0) {
user.put("email", cursor.getString(1));
user.put("uid", cursor.getString(2));
}
cursor.close();
db.close();
// return user
Log.d(TAG, "Fetching user from Sqlite: " + user.toString());
return user;
}
/**
* Re crate database Delete all tables and create them again
* */
public void deleteUsers() {
SQLiteDatabase db = this.getWritableDatabase();
// Delete All Rows
db.delete(TABLE_USER, null, null);
db.close();
Log.d(TAG, "Deleted all user info from sqlite");
}
}
public class MainActivity extends Activity {
CallbackManager callbackManager;
Button share,details;
ShareDialog shareDialog;
LoginButton login;
ProfilePictureView profile;
Dialog details_dialog;
TextView details_txt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
setContentView(R.layout.activity_main);
callbackManager = CallbackManager.Factory.create();
login = (LoginButton)findViewById(R.id.login_button);
profile = (ProfilePictureView)findViewById(R.id.picture);
shareDialog = new ShareDialog(this);
share = (Button)findViewById(R.id.share);
details = (Button)findViewById(R.id.details);
login.setReadPermissions("public_profile email");
share.setVisibility(View.INVISIBLE);
details.setVisibility(View.INVISIBLE);
details_dialog = new Dialog(this);
details_dialog.setContentView(R.layout.dialog_details);
details_dialog.setTitle("Details");
details_txt = (TextView)details_dialog.findViewById(R.id.details);
details.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
details_dialog.show();
}
});
if(AccessToken.getCurrentAccessToken() != null){
RequestData();
share.setVisibility(View.VISIBLE);
details.setVisibility(View.VISIBLE);
}
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(AccessToken.getCurrentAccessToken() != null) {
share.setVisibility(View.INVISIBLE);
details.setVisibility(View.INVISIBLE);
profile.setProfileId(null);
}
}
});
share.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ShareLinkContent content = new ShareLinkContent.Builder().build();
shareDialog.show(content);
}
});
login.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
if(AccessToken.getCurrentAccessToken() != null){
RequestData();
share.setVisibility(View.VISIBLE);
details.setVisibility(View.VISIBLE);
}
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException exception) {
}
});
}
public void RequestData(){
GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object,GraphResponse response) {
JSONObject json = response.getJSONObject();
try {
if(json != null){
String text = "<b>Name :</b> "+json.getString("name")+"<br><br><b>Email :</b> "+json.getString("email")+"<br><br><b>Profile link :</b> "+json.getString("link");
details_txt.setText(Html.fromHtml(text));
profile.setProfileId(json.getString("id"));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,link,email,picture");
request.setParameters(parameters);
request.executeAsync();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
}