我是新來的facebook api和android.But以某種方式嘗試管理登錄到我的Facebook帳戶,並檢索我的帳戶的一些信息,即id,first_name,last_name。創建時使用的sdk(android)此應用程序是sdk(android)級別8,但當我使用sdk(android)級別> 8應用程序崩潰和logcat(networkonmainthreadException)上產生的錯誤。我做了一些搜索,發現這是sdk級別的線程問題,現在我要去爲的AsyncTask但弄糊塗了放在哪裏登錄代碼爲Facebook,什麼事情會回到mainactivityfacebook api with android
我的SDK 8級代碼: -
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
loginnfetch=(Button) findViewById(R.id.button1);
loginnfetch.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
facebook=new Facebook(APP_ID);
restorecredential(facebook);
if(!facebook.isSessionValid())
{
loginandfetch();
}
else
{
fetch();
}
}
});
}
protected void fetch()
{
try {
JSONObject jobj=new JSONObject(facebook.request("me"));
int id=jobj.getInt("id");
String fname=jobj.getString("first_name");
String lname=jobj.getString("last_name");
//String emailid=jobj.getString("email");
Toast.makeText(getApplicationContext(), ".."+id+".."+fname+".."+lname, 0).show();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected void loginandfetch()
{
facebook.authorize(this, PERMISSIONS, Facebook.FORCE_DIALOG_AUTH,new DialogListener() {
@Override
public void onFacebookError(FacebookError e)
{
Toast.makeText(getApplicationContext(), "ERROR WHILE LOGIN", 0).show();
}
@Override
public void onError(DialogError e) {
Toast.makeText(getApplicationContext(), "ERROR WHILE LOGIN", 0).show();
}
@Override
public void onComplete(Bundle values) {
saveCredentials(facebook);
fetch();
}
@Override
public void onCancel() {
Toast.makeText(getApplicationContext(), "ERROR WHILE LOGIN", 0).show();
}
});
}
protected boolean restorecredential(Facebook facebook2)
{
SharedPreferences sharedPreferences = getApplicationContext()
.getSharedPreferences(KEY, Context.MODE_PRIVATE);
facebook.setAccessToken(sharedPreferences.getString(TOKEN, null));
facebook.setAccessExpires(sharedPreferences.getLong(EXPIRES, 0));
return facebook.isSessionValid();
}
public boolean saveCredentials(Facebook facebook) {
Editor editor = getApplicationContext().getSharedPreferences(KEY,
Context.MODE_PRIVATE).edit();
editor.putString(TOKEN, facebook.getAccessToken());
editor.putLong(EXPIRES, facebook.getAccessExpires());
return editor.commit();
}
如果用或某些環節 謝謝和抱歉,如果事情是不正確
我使用的AsyncTask請大家幫我上 – Goutam
你使用的AsyncTask()在哪裏? – AndroidLearner
這裏是我的AsyncTask代碼請讓我知道,如果事情是缺少的:公共無效的onClick(視圖v) \t { \t \t開關(v.getId()) \t \t { \t \t情況下R.id .button1: \t \t \t Loginnfetchtask task = new Loginnfetchtask(); \t \t \t task.execute(APP_ID); \t \t \t中斷;私人\t類Loginnfetchtask延伸的AsyncTask <字符串,整數,長> \t { \t \t \t @Override \t \t 保護\t龍doInBackground(字符串... PARAMS){ \t \t \t實=新Facebook(APP_ID); \t \t \t restorecrediantial(facebook); \t \t \t if(!facebook.isSessionValid()) – Goutam