Facebook を libgdx と統合しました。メイン クラスで Facebook ダイアログと別の画面を呼び出し、ログイン後に別の画面に移動する必要があります。
if (mFacebook.isSessionValid()) {
String name = SessionStore.getName(this);
name = (name.equals("")) ? "Unknown" : name;
pk = name;
initialize(new GO(), false);
}
else{
initialize(new GOloginscreen(), false);
mFacebook.authorize(this, PERMISSIONS, -1, new FbLoginDialogListener());
}
ログイン セッションがある場合はメイン メニュー画面に移動しますが、そうでない場合は fb ログイン ダイアログを呼び出します。ログイン後、ここで初期化を設定します
public void onComplete(Bundle values) {
SessionStore.save(mFacebook, AndroidStarter.this);
getFbName();
initialize(new GO(), false);
}
初期化はoncreateメソッドにある必要があるため、機能しませんか?
どうすればこれを行うことができるか、または別の解決策を知っている人はいますか?
私はこれで立ち往生しています、ここに私の完全なコードがあります
public class AndroidStarter extends AndroidApplication{
private Facebook mFacebook;
private ProgressDialog mProgress;
String PERMISSIONS[] = { "read_stream", "user_relationship_details",
"user_religion_politics", "user_work_history",
"user_relationships", "user_interests", "user_likes",
"user_location", "user_hometown", "user_education_history",
"user_activities", "offline_access" };
String APP_ID = "thismyfbid2133";
public static String pk;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pk = "id";
// Do the stuff that initialize() would do for you
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
mProgress = new ProgressDialog(this);
mFacebook = new Facebook(APP_ID);
SessionStore.restore(mFacebook, this);
if (mFacebook.isSessionValid()) {
String name = SessionStore.getName(this);
name = (name.equals("")) ? "Unknown" : name;
pk = name;
initialize(new GO(), false);
}
else{
initialize(new GOloginscreen(), false);
mFacebook.authorize(this, PERMISSIONS, -1, new FbLoginDialogListener());
}
}
private final class FbLoginDialogListener implements DialogListener {
public void onComplete(Bundle values) {
SessionStore.save(mFacebook, AndroidStarter.this);
getFbName();
}
public void onFacebookError(FacebookError error) {
Toast.makeText(AndroidStarter.this, "Facebook connection failed", Toast.LENGTH_SHORT).show();
}
public void onError(DialogError error) {
Toast.makeText(AndroidStarter.this, "Facebook connection failed", Toast.LENGTH_SHORT).show();
}
public void onCancel() {
}
}
private void getFbName() {
mProgress.setMessage("Finalizing ...");
mProgress.show();
new Thread() {
@Override
public void run() {
String name = "";
int what = 1;
try {
String me = mFacebook.request("me");
JSONObject jsonObj = (JSONObject) new JSONTokener(me).nextValue();
name = jsonObj.getString("name");
what = 0;
} catch (Exception ex) {
ex.printStackTrace();
}
mFbHandler.sendMessage(mFbHandler.obtainMessage(what, name));
}
}.start();
}
private Handler mFbHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
mProgress.dismiss();
if (msg.what == 0) {
String username = (String) msg.obj;
username = (username.equals("")) ? "No Name" : username;
SessionStore.saveName(username, AndroidStarter.this);
Toast.makeText(AndroidStarter.this, "Connected to Facebook as " + username, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(AndroidStarter.this, "Connected to Facebook", Toast.LENGTH_SHORT).show();
}
}
};
}