Facebook SDK を使用して Facebook にログオンするアプリケーションを作成したいと考えています。同じものを使用してログイン機能を実装することに成功しました。(また、非推奨の関数を使用していることにも言及したいと思います。後でさらに別のものに切り替えます。ここで発生している問題を最初に修正したいと思います)。しかし、ログアウト機能の実装に問題がありました。調査を行ったところ、パフォーマンスを向上させるために AsyncTasks にネットワーク機能を実装する必要があることがわかりました。では、AsyncTask を使用してこの機能を実装する必要がありますか? 以下は私のコードです。私の基本的な概念を明確にするために、必要な修正と、さらに読み物や記事を提案してください。私は Android が初めてで、AsyncTasks を理解する上で問題に直面しています。
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.fb_button:
try{
if(fb.isSessionValid())
{
new myAsyncClass().doInBackground(fb);
//button close session
}
else
{
fb.authorize(LoginPage.this, new DialogListener(){
@Override
public void onFacebookError(FacebookError e)
{
Toast.makeText(LoginPage.this, "on Facebook error", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(DialogError e)
{
Toast.makeText(LoginPage.this, "on error", Toast.LENGTH_SHORT).show();
}
@Override
public void onComplete(Bundle values)
{
update_fb_buttonimage();
Toast.makeText(getBaseContext(), "onComplete works",Toast.LENGTH_LONG).show();
}
@Override
public void onCancel()
{
}
});
//login in to facebook
}
}catch(Exception e){
Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show();
}
私の asynctask クラスは次のとおりです....
private class myAsyncClass extends AsyncTask<Facebook, Void, Void>{
protected void onPreExecute() {
// update the UI immediately after the task is executed
super.onPreExecute();
}
@Override
protected Void doInBackground(Facebook... arg0) {
// TODO Auto-generated method stub
Facebook fb=arg0[0];
try {
fb.logout(getApplicationContext());
update_fb_buttonimage();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
したがって、スイッチの場合、セッションが無効でボタンをクリックすると、問題なく Facebook にログオンし、ビュー (ボタン) も更新されます。しかし、セッションが有効な場合、有名な例外が発生します
android.os.networkonmainthreadexception
どこに置くべきですか
new myAsyncClass().doInBackground(fb);
私に提案してください!! 私は完全に立ち往生しています。