0

次の簡単な機能を実装しています。簡単なボタンがあり、クリックすると Facebook にログインできます。同じためにFacebook SDKを使用しています。をクリックすると、ボタンの src イメージ (imageview) も更新されます。この時点まで、すべてが正常に機能します。しかし、ログアウトするために同じボタンをクリックすると、

 android.os.networkonmainthreadexception

例外。誰でもこの問題を解決するのを手伝ってもらえますか?

編集:私のコードは次のとおりです:

  public void onClick(View v) {
    // TODO Auto-generated method stub

    switch(v.getId()){
    case R.id.fb_button:

        try{
        if(fb.isSessionValid())
        {
            try {
                fb.logout(getBaseContext());
                update_fb_buttonimage();
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //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();

        }

ありがとう!

4

2 に答える 2

2

ここでの問題は、別のスレッドで Web サービス呼び出し (または what-have-you) を行う必要があるということです。したがって、非常に簡単に言えば、Android でスレッド化を行う方法を調べる必要があります。残念ながら、別のスレッドでサービス呼び出しを行う必要があるため、これは少し面倒ですが、メイン スレッドで UI を更新する必要があります。通常、これにはスレッド間でデータを渡す必要があり、これにはハンドラーやその他の複雑さが伴います。幸いなことに、Android プラットフォームには、これを処理する Async Task が用意されています。これにより、この複雑さが軽減され、コードが煩雑になるのを防ぐことができます。

于 2013-03-09T08:30:51.600 に答える
1

この例外は、アプリケーションがメイン スレッドでネットワーク操作を実行しようとするとスローされます。コードを実行しますAsyncTask

于 2013-03-09T08:30:56.910 に答える