Android-график в Facebook - PullRequest
       2

Android-график в Facebook

0 голосов
/ 22 марта 2012

Я использую android-facebook-sdk и пытаюсь запросить информацию в профиле.Но я не могу получить ответ.Я сгенерировал хэш ключа с помощью keytool и вставил его в настройки приложения Facebook.Также я добавил идентификатор приложения в коде.Проблема в том, что я не могу получить информацию о профиле или какую-либо информацию вообще.

 public class StartingPoint extends Activity {

    Facebook facebook = new Facebook("actual app id");
    String FILENAME = "AndroidSSO_data";
    private SharedPreferences mPrefs;
    AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook);


    Button btnt;

    /*
     * On Create
     * */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        /*
         * button Test
         * */
        btnt = (Button) findViewById(R.id.btntallinn);
        btnt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getProfileInformation();
            }
        });

        /*
         * Get existing access_token if any
         */
        mPrefs = getPreferences(MODE_PRIVATE);
        String access_token = mPrefs.getString("access_token", null);
        long expires = mPrefs.getLong("access_expires", 0);
        if (access_token != null) {
            facebook.setAccessToken(access_token);
        }
        if (expires != 0) {
            facebook.setAccessExpires(expires);
        }

        /*
         * Only call authorize if the access_token has expired.
         */
        if (!facebook.isSessionValid()) {

            facebook.authorize(this, new String[] { "email",
                    "publish_checkins", "rsvp_event", "manage_pages",
                    "publish_stream", "user_likes", "user_groups" },

            new DialogListener() {
                @Override
                public void onComplete(Bundle values) {
                    SharedPreferences.Editor editor = mPrefs.edit();
                    editor.putString("access_token", facebook.getAccessToken());
                    editor.putLong("access_expires",
                            facebook.getAccessExpires());
                    editor.commit();


                }

                @Override
                public void onFacebookError(FacebookError error) {
                }

                @Override
                public void onError(DialogError e) {
                }

                @Override
                public void onCancel() {
                }

            });

        }
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        facebook.extendAccessTokenIfNeeded(this, null);
    }


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

        facebook.authorizeCallback(requestCode, resultCode, data);
        }


    public void getProfileInformation() {

        mAsyncRunner.request("me", new RequestListener() {

            @Override
            public void onComplete(String response, Object state) {
                Log.d("Profile", response);
                String json = response;

                try {
                    JSONObject profile = new JSONObject(json);
                    // getting name of the user
                    final String name = profile.getString("name");
                    // getting email of the user
                    final String email = profile.getString("email");

                    runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(), "Name: " + name + "\nEmail: " + email, Toast.LENGTH_LONG).show();
                        }

                    });

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onIOException(IOException e, Object state) {
            }

            @Override
            public void onFileNotFoundException(FileNotFoundException e,
                    Object state) {
            }

            @Override
            public void onMalformedURLException(MalformedURLException e,
                    Object state) {
            }

            @Override
            public void onFacebookError(FacebookError e, Object state) {
            }
        });
    }
}

Logcat:

03-22 09:38:13.545: D/Profile(23833): {"error":{"message":"An active access token must be used to query information about the current user.","type":"OAuthException","code":2500}}
03-22 09:38:13.545: W/System.err(23833): org.json.JSONException: No value for name
03-22 09:38:13.545: W/System.err(23833):    at org.json.JSONObject.get(JSONObject.java:354)
03-22 09:38:13.545: W/System.err(23833):    at org.json.JSONObject.getString(JSONObject.java:510)
03-22 09:38:13.545: W/System.err(23833):    at com.tana.tallinn.tartu.StartingPoint$3.onComplete(StartingPoint.java:172)
03-22 09:38:13.545: W/System.err(23833):    at com.facebook.android.AsyncFacebookRunner$2.run(AsyncFacebookRunner.java:254)

1 Ответ

1 голос
/ 22 апреля 2012

Ошибка говорит о том, что вам не нужен токен доступа.попробуйте напечатать facebook.getaccesstoken() и посмотрите, есть ли у вас действующий токен. С этим токеном вы можете попробовать в браузере проверить, есть ли у вас информация профиля

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...