2014-03-19 20 views
0

我有一个活动类和登录片段。我使用Facebook登录。现在我有异常调用。 NetworkOnMainThreadException。请在下面找到我使用的代码。Facebook上的NetworkOnMainThreadException登录

package com.maintab; 
import org.json.JSONObject; 
import com.example.tesfragement.*; 
import com.facebook.android.DialogError; 
import com.facebook.android.Facebook; 
import com.facebook.android.Facebook.DialogListener; 
import com.facebook.android.FacebookError; 
import com.facebook.android.Util; 
import android.os.Bundle; 
import android.annotation.SuppressLint; 
import android.app.Fragment; 
import android.service.textservice.SpellCheckerService.Session; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.Toast; 


@SuppressLint("ValidFragment") 
public class Login extends Fragment { 

    View view; 
    ImageView loginbuttton,logoutbutton; 

    Facebook fb; 

    @SuppressLint("ValidFragment") 
    public Login(Facebook fb) { 

     this.fb=fb; 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     view= inflater.inflate(R.layout.login, container, false); 
     loginbuttton=(ImageView) view.findViewById(R.id.loinbutton); 

     thread.start(); 

     return view; 
    } 


    Thread thread=new Thread(new Runnable() { 

     @Override 
     public void run() { 
      // TODO Auto-generated method stub 

      loginbuttton.setOnClickListener(btnClick); 
     } 
    }); 


    ImageView.OnClickListener btnClick=new ImageView.OnClickListener() 
    { 



     @SuppressWarnings("deprecation") 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 


       if(fb.isSessionValid()) 
       { 
        Toast.makeText(getActivity(),"session is valid", Toast.LENGTH_LONG).show(); 
       } 
       else{ 

         fb.authorize(getActivity(), new String[]{"email"}, new DialogListener() { 

          @Override 
          public void onFacebookError(FacebookError e) { 

           Toast.makeText(getActivity(), "Network Connction Unavaliable", Toast.LENGTH_LONG).show(); 
          } 

          @Override 
          public void onError(DialogError e) { 
           // TODO Auto-generated method stub 

          } 

          @Override 
          public void onComplete(Bundle values) { 
           // TODO Auto-generated method stub 

           try { 
             JSONObject json = Util.parseJson(fb.request("me")); 
             String firstName = json.getString("first_name"); 
             String lastName = json.getString("last_name"); 

             String full_name = firstName+" "+lastName; 
             Log.d("Name", firstName+" "+lastName); 

             Toast.makeText(getActivity(), "You already have a valid session, " + firstName + " " + lastName + ". No need to re-authorize.", Toast.LENGTH_SHORT).show(); 
             }catch(Exception error) { 
              Toast.makeText(getActivity(), error.toString(), Toast.LENGTH_SHORT).show(); 
              } 

          } 


          @Override 
          public void onCancel() { 
           // TODO Auto-generated method stub 
           Toast.makeText(getActivity(), "Login Error...", Toast.LENGTH_LONG).show(); 
          } 
         }); 

        } 




     } 

    }; 
    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onActivityCreated(savedInstanceState); 
    } 

} 
+0

使用的AsyncTask –

+0

@SimplePlan请你将它张贴作为一个回答你的网络相关工作纳入背景。 – VenushkaT

回答

0

您正在处理ui线程上的网络操作。因此NetworkOnMainThreadException。您可以使用AsyncTaskThreadvolley

另外Fragment的构造函数应该没有参数。

public Login(Facebook fb) { // constructor has an arg 

你可以请按照Android文档的Facebook登录@

https://developers.facebook.com/docs/android/login-with-facebook/

有一个在Facebook的SDK我猜还提供了一个样本。

+0

请发现我编辑的代码即时获取相同的异常 – VenushkaT

+0

@VenushkaT简单。按照文档链接张贴在我的文章 – Raghunandan

+0

我已按照它,但注销按钮没有对我工作 – VenushkaT

0

尝试这种方式

Thread thread = new Thread(new Runnable(){ 
    @Override 
    public void run() { 
     try { 
      //Your code goes here 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
}); 

thread.start(); 
+0

我已done.please找到我编辑code.still即时获得exception.thank你 – VenushkaT

0

处理程序将myHandler =新的处理程序(); Runnable runnable;

new Thread(new Runnable() { 

      @Override 
      public void run() { 
       try { 
        //this is background thread. 
       } catch (Exception e) { 

       } 
       myHandler.post(runnable); 
      } 
     }).start(); 
     runnable = new Runnable() { 

      @Override 
      public void run() { 
       //This is UI thread.U can add UI related code here 
      } 
     }; 
+0

仍然即时获得相同例外 – VenushkaT

+0

把这个上面的代码在方法例如load()和调用该方法在Oncreate ... – anjaneya

+0

它didn'对我起作用。我试过了,你可以编辑我的code.please – VenushkaT