2017-01-31 10 views
1

ここで私はアクセストークンとプロフィールの画像を取得することができません。Android - Accesstokenのエラーfacebook

私が間違っていることは分かりません。

助けてください。

私はすべてを正しく設定しました。

package com.example; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.widget.TextView; 
import android.widget.Toast; 
import com.facebook.*; 
import com.facebook.CallbackManager; 
import com.facebook.FacebookCallback; 
import com.facebook.FacebookException; 
import com.facebook.FacebookSdk; 
import com.facebook.Profile; 
import com.facebook.login.LoginManager; 
import com.facebook.login.LoginResult; 
import com.facebook.login.widget.LoginButton; 
import com.facebook.login.widget.ProfilePictureView; 


public class MainActivity extends AppCompatActivity { 
    CallbackManager callbackManager; 
    public String accessToken; 
    private ProfilePictureView profilePictureView; 
    String name; 
    TextView fname; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     FacebookSdk.sdkInitialize(this.getApplicationContext()); 
     setContentView(R.layout.activity_main); 

     fname = (TextView) findViewById(R.id.textView); 
     profilePictureView = (ProfilePictureView) findViewById(R.id.profilePicture); 

     callbackManager = CallbackManager.Factory.create(); 


     LoginButton loginButton = (LoginButton) findViewById(R.id.login_button); 
     loginButton.setReadPermissions("public_profile","email", "user_friends"); 
     // If using in a fragment 
     //loginButton.setFragment(MainActivity.this); 
     // Other app specific specialization 

     // Callback registration 
     loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       accessToken = String.valueOf(loginResult.getAccessToken()); 
       Toast.makeText(getBaseContext(),accessToken,Toast.LENGTH_LONG).show(); 
       Profile profile = Profile.getCurrentProfile(); 
       name = profile.getFirstName(); 
       fname.setText(name); 
       profile = Profile.getCurrentProfile(); 
       profilePictureView.setProfileId(profile.getId()); 
      } 

      @Override 
      public void onCancel() { 
       // App code 
      } 

      @Override 
      public void onError(FacebookException exception) { 
       Toast.makeText(getBaseContext(),exception.toString(),Toast.LENGTH_LONG).show(); 
      } 
     }); 

     LoginManager.getInstance().registerCallback(callbackManager, 
       new FacebookCallback() { 

        @Override 
        public void onSuccess(Object o) { 

        } 

        @Override 
        public void onCancel() { 

        } 

        @Override 
        public void onError(FacebookException error) { 
         Toast.makeText(getBaseContext(),error.toString(),Toast.LENGTH_LONG).show(); 

        } 
       }); 

    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     callbackManager.onActivityResult(requestCode, resultCode, data); 
    } 

} 

名前とdpを表示しようとしています。 アクセストークンを取得していません。おかげさまで

答えて

0

ログイン結果に応答するには、LoginManagerまたはLoginButtonでコールバックを登録する必要があります。 LoginButtonでコールバックを登録する場合は、ログインマネージャにコールバックを登録する必要はありません。

だから最初のリムーバーLoginManager

GraphRequestを使用してユーザーのデータを取得できるようになりました。ここで行うことができます。 GraphRequestGraph API

コーディングハッピーについての詳細を理解するための

loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
    @Override 
    public void onSuccess(LoginResult loginResult) { 

     final ProgressDialog pd = new ProgressDialog(Login.this); 
     pd.setMessage("Please Wait.."); 
     String accessToken = loginResult.getAccessToken().getToken(); 
     Log.i("accessToken", accessToken); 

     GraphRequest request = GraphRequest.newMeRequest(
       loginResult.getAccessToken(), 
      new GraphRequest.GraphJSONObjectCallback() { 
       @Override 
       public void onCompleted(JSONObject object, 
             GraphResponse response) { 
        Log.i("LoginActivity", 
         response.toString()); 
        try { 
         id = object.getString("id"); 
         try { 
          URL profile_pic = new URL(
                "https://graph.facebook.com/" + id + "/picture?type=large"); 
          user_image = profile_pic.toString(); 
         } catch (MalformedURLException e) { 
          e.printStackTrace(); 
         } 

         name = object.getString("name"); 
         email = object.getString("email"); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 

       } 
      }); 
     Bundle parameters = new Bundle(); 
     parameters.putString("fields", 
       "id,name,email,gender, birthday"); 
     request.setParameters(parameters); 
     request.executeAsync(); 
     pd.show(); 
    } 

    @Override 
    public void onCancel() { 
     // App code 
    } 

    @Override 
    public void onError(FacebookException exception) { 
     Toast.makeText(getBaseContext(),exception.toString(),Toast.LENGTH_LONG).show(); 
    } 
}); 

+0

ユーザーはログインできません。アプリケーションが再起動しているときユーザーはログインしていますが、名前とプロファイルを保存できません。 – Nolan

+0

「SharedPreferences」に保存します。 –

+0

私は先生です。しかし、あなたは私に例を教えてくれませんか? – Nolan

関連する問題