2011-05-05 4 views
0

Amis, j'ai une erreur dans l'intégration de facebook sur un bouton, il renvoie toujours NullPointerException, je ne sais pas pourquoi? S'il vous plaît me suggérer le bon résultat ......Intégration de Facebook dans android

code:

package com.ex.softZilla; 

import java.util.List; 

import org.apache.http.NameValuePair; 
import org.apache.http.client.HttpClient; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.Context; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.os.Bundle; 
import android.os.Handler; 
import android.util.Log; 
import android.view.Display; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.ImageButton; 
import android.util.AttributeSet; 
import android.graphics.Color; 
import com.ex.softZilla.BaseRequestListener; 
import com.ex.softZilla.SessionEvents.AuthListener; 
import com.ex.softZilla.SessionEvents.LogoutListener; 
import com.ex.softZilla.Facebook.DialogListener; 





public class SettingActivity extends Activity{ 
    final String APP_ID = "172619129456913"; 
    String bytesSent; 
    HttpClient httpclient; 
    int count1; 
    // List with parameters and their values 
    List<NameValuePair> nameValuePairs; 

    LoginButton mLoginButton; 
    TextView mText; 
    Facebook mFacebook; 
    AsyncFacebookRunner mAsyncRunner; 
    AlertDialog.Builder alertNetwork; 
    private Facebook mFb; 
    private Handler mHandler; 
    private SessionListener mSessionListener = new SessionListener(); 
    private String[] mPermissions; 
    private Activity mActivity; 
    Button btn_facebook; 
    Button btn_twitter; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.more_setting); 

    btn_facebook = (Button)findViewById(R.id.btn_More_setting_facebook); 
    btn_twitter = (Button)findViewById(R.id.btn_more_setting_twitter); 


      btn_facebook.setOnClickListener(new View.OnClickListener() { 

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

       alertNetwork = new AlertDialog.Builder(SettingActivity.this); 
       ConnectivityManager connMgr = (ConnectivityManager) 
        SettingActivity.this.getSystemService(getApplicationContext().CONNECTIVITY_SERVICE); 

       /* final android.net.NetworkInfo wifi = 
        connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

       final android.net.NetworkInfo mobile = 
        connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);*/ 

       /*if(!wifi.isAvailable()||mobile.isAvailable()){ 

         alertNetwork.setTitle("Network Error."); 

         alertNetwork.setMessage("Please check your network connection."); 
         alertNetwork.setNeutralButton("Ok",null); 
           alertNetwork.show(); 
           this.onDestroy(); 
         }*/ 

       if (APP_ID == null) { 
        Util.showAlert(SettingActivity.this, "Warning", "Facebook Applicaton ID must be " + 
          "specified before running this example: see Example.java"); 
       } 


       Display display = getWindowManager().getDefaultDisplay(); 
       int width = display.getWidth(); 
       int height = display.getHeight(); 
       System.out.println("Width:"+width); 
       System.out.println("Height:"+height); 


        // setContentView(R.layout.facebookviewlarge); 




       mText = (TextView) SettingActivity.this.findViewById(R.id.txt); 



       mFacebook = new Facebook(APP_ID); 
       mAsyncRunner = new AsyncFacebookRunner(mFacebook); 

       SessionStore.restore(mFacebook, SettingActivity.this); 
       SessionEvents.addAuthListener(new SampleAuthListener()); 
       SessionEvents.addLogoutListener(new SampleLogoutListener()); 

       //login class is calling here 
       // mLoginButton.init(SettingActivity.this, mFacebook); 
       //mLoginButton. 

       if (mFb.isSessionValid()) { 
        SessionEvents.onLogoutBegin(); 
        AsyncFacebookRunner asyncRunner = new AsyncFacebookRunner(mFb); 
        asyncRunner.logout(getApplicationContext(), new LogoutRequestListener()); 
       } else { 
        mFb.authorize(mActivity, mPermissions, 
            new LoginDialogListener()); 
       } 
      } 








      /*Intent intent = new Intent(SettingActivity.this,Example.class); 
      startActivity(intent);*/ 


    }); 
    btn_twitter.setOnClickListener(new View.OnClickListener() { 


     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      Intent intent = new Intent(SettingActivity.this,TwitterViewController.class); 
      startActivity(intent); 


     } 

    }); 
} 
    class SampleAuthListener implements AuthListener { 

      public void onAuthSucceed() { 
       mText.setText("You have logged in! "); 
       mFacebook.dialog(SettingActivity.this, "feed", new SampleDialogListener()); 



      } 

      public void onAuthFail(String error) { 
       mText.setText("Login Failed: " + error); 
      } 
     } 

     class SampleLogoutListener implements LogoutListener { 
      public void onLogoutBegin() { 
       mText.setText("Logging out..."); 
      } 

      public void onLogoutFinish() { 
       mText.setText("You have logged out! "); 

      } 
     } 

     class SampleRequestListener extends BaseRequestListener { 

      public void onComplete(final String response) { 
       try { 
        // process the response here: executed in background thread 
        Log.d("Facebook-Example", "Response: " + response.toString()); 
        JSONObject json = Util.parseJson(response); 
        final String name = json.getString("name"); 

        // then post the processed result back to the UI thread 
        // if we do not do this, an runtime exception will be generated 
        // e.g. "CalledFromWrongThreadException: Only the original 
        // thread that created a view hierarchy can touch its views." 
        SettingActivity.this.runOnUiThread(new Runnable() { 
         public void run() { 
          mText.setText("Hello there, " + name + "!"); 
         } 
        }); 
       } catch (JSONException e) { 
        Log.w("Facebook-Example", "JSON Error in response"); 
       } catch (FacebookError e) { 
        Log.w("Facebook-Example", "Facebook Error: " + e.getMessage()); 
       } 
      } 
     } 


     class WallPostRequestListener extends BaseRequestListener { 

      public void onComplete(final String response) { 
       Log.d("Facebook-Example", "Got response: " + response); 
       String message = "<empty>"; 
       try { 
        JSONObject json = Util.parseJson(response); 
        message = json.getString("message"); 
       } catch (JSONException e) { 
        Log.w("Facebook-Example", "JSON Error in response"); 
       } catch (FacebookError e) { 
        Log.w("Facebook-Example", "Facebook Error: " + e.getMessage()); 
       } 
       final String text = "Your Wall Post: " + message; 
       SettingActivity.this.runOnUiThread(new Runnable() { 
        public void run() { 
         mText.setText(text); 
         //postTotalShare(); 
        } 
       }); 
      } 


     } 

     class SampleDialogListener extends BaseDialogListener { 

      public void onComplete(Bundle values) { 
       final String postId = values.getString("post_id"); 
       if (postId != null) { 
        Log.d("Facebook-Example", "Dialog Success! post_id=" + postId); 
        mAsyncRunner.request(postId, new WallPostRequestListener()); 

       } 
     } 

     } 
    class SessionListener implements AuthListener, LogoutListener { 

      public void onAuthSucceed() { 
       //setImageResource(R.drawable.logout_button); 
       SessionStore.save(mFb, getApplicationContext()); 
      } 

      public void onAuthFail(String error) { 
      } 

      public void onLogoutBegin() {   
      } 

      public void onLogoutFinish() { 
       SessionStore.clear(getApplicationContext()); 
       //setImageResource(R.drawable.login_button); 
      } 
     } 
    public void init(final Activity activity, final Facebook fb) { 
      init(activity, fb, new String[] {}); 
     } 

     public void init(final Activity activity, final Facebook fb, 
         final String[] permissions) { 
      mActivity = activity; 
      mFb = fb; 
      mPermissions = permissions; 
      mHandler = new Handler(); 

      // setBackgroundColor(Color.TRANSPARENT); 
      // setAdjustViewBounds(true); 
      //setImageResource(fb.isSessionValid() ? 
          //R.drawable.logout_button : 
          //R.drawable.login_button); 
      //drawableStateChanged(); 

      SessionEvents.addAuthListener(mSessionListener); 
      SessionEvents.addLogoutListener(mSessionListener); 

     } 

     private final class LoginDialogListener implements DialogListener { 
      public void onComplete(Bundle values) { 
       SessionEvents.onLoginSuccess(); 
      } 

      public void onFacebookError(FacebookError error) { 
       SessionEvents.onLoginError(error.getMessage()); 
      } 

      public void onError(DialogError error) { 
       SessionEvents.onLoginError(error.getMessage()); 
      } 

      public void onCancel() { 
       SessionEvents.onLoginError("Action Canceled"); 
      } 
     } 

     private class LogoutRequestListener extends BaseRequestListener { 
      public void onComplete(String response) { 
       // callback should be run in the original thread, 
       // not the background thread 
       mHandler.post(new Runnable() { 
        public void run() { 
         SessionEvents.onLogoutFinish(); 
        } 
       }); 
      } 
     } 
} 

erreur:

05-05 15:35:05.351: ERROR/AndroidRuntime(6175): FATAL EXCEPTION: main 
05-05 15:35:05.351: ERROR/AndroidRuntime(6175): java.lang.NullPointerException 
05-05 15:35:05.351: ERROR/AndroidRuntime(6175):  at com.ex.softZilla.Facebook.startSingleSignOn(Facebook.java:221) 
05-05 15:35:05.351: ERROR/AndroidRuntime(6175):  at com.ex.softZilla.Facebook.authorize(Facebook.java:190) 
05-05 15:35:05.351: ERROR/AndroidRuntime(6175):  at com.ex.softZilla.Facebook.authorize(Facebook.java:114) 
05-05 15:35:05.351: ERROR/AndroidRuntime(6175):  at com.ex.softZilla.SettingActivity$1.onClick(SettingActivity.java:127) 
05-05 15:35:05.351: ERROR/AndroidRuntime(6175):  at android.view.View.performClick(View.java:2408) 
05-05 15:35:05.351: ERROR/AndroidRuntime(6175):  at android.view.View$PerformClick.run(View.java:8816) 
05-05 15:35:05.351: ERROR/AndroidRuntime(6175):  at android.os.Handler.handleCallback(Handler.java:587) 
05-05 15:35:05.351: ERROR/AndroidRuntime(6175):  at android.os.Handler.dispatchMessage(Handler.java:92) 
05-05 15:35:05.351: ERROR/AndroidRuntime(6175):  at android.os.Looper.loop(Looper.java:123) 
05-05 15:35:05.351: ERROR/AndroidRuntime(6175):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
05-05 15:35:05.351: ERROR/AndroidRuntime(6175):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-05 15:35:05.351: ERROR/AndroidRuntime(6175):  at java.lang.reflect.Method.invoke(Method.java:521) 
05-05 15:35:05.351: ERROR/AndroidRuntime(6175):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
05-05 15:35:05.351: ERROR/AndroidRuntime(6175):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
05-05 15:35:05.351: ERROR/AndroidRuntime(6175):  at dalvik.system.NativeStart.main(Native Method) 
+2

Où l'erreur se produit-elle exactement? Quelle est la stacktrace? S'il vous plaît envisager de couper ce mur de code à seulement le bit pertinent. –

+0

C'est probablement un problème très simple. Vous avez juste besoin de fournir la trace de la pile et peut-être découper le code pour nous. –

+0

Vous semblez avoir deux variables Facebook, mFacebook et mFb. Cela pourrait-il être la cause si vous en initialisez un et utilisez l'autre étant toujours nul? – harism

Répondre

0

Sur la base the ever so useful list of good Android libraries peut-être vous devriez utiliser le Facebook Android API à la place (ce qui semble être) rouler le vôtre.

Editer: Je sais ... mais encore. Quoi qu'il en soit, j'ai regardé votre code et je crois que la variable mPermissions n'est jamais définie et est donc passée comme nulle, est référencée et crée à son tour votre exception de pointeur Null. Cela se produit lorsque vous appelez cette fonction:

mFb.authorize(mActivity, mPermissions, new LoginDialogListener()); 

Comme mPermissions est null, vous avez un problème. Ce serait probablement pas arrivé si la fonction init a été appelé mais il a été commened sur:

// mLoginButton.init(SettingActivity.this, mFacebook); 

Peut-être que les dépendances dans le code pourrait être un peu plus lisse; le code n'est peut-être pas assez fonctionnel.

+0

Il est juste pour facebook connecter Robert, j'ai besoin de messages pour mon application Android, qui est enregistrée sur facebook –

+0

@ user621380: Edité pour inclure une réponse potentielle. –