在Android中获取Facebook个人资料

时间:2014-06-19 10:42:57

标签: android facebook

嘿我每次使用这段代码来获取Facebook的个人资料,但它不适合我...... 我正在按照本教程http://www.androidhive.info/2012/03/android-facebook-connect-tutorial/我不知道这是什么问题,请帮助我。

 public void getProfileInformation() {
            mAsyncRunner.request("me", new RequestListener() {
                @Override
                public void onComplete(String response, Object state) {

                    Log.d("Profile", response);
                    String json = response;
                    try {
                        txt2.setText("testing 124");
                        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");
                      txt2.setText("Name: " +name+"Email: " +email);
                        runOnUiThread(new Runnable() {

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

                            }

                        });

                    } catch (JSONException e) {
                        txt2.setText(e.toString());
                        e.printStackTrace();
                    }
                    logoutFromFacebook();   
                }

                @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) {
                }
            });
        }

请帮助我该怎么做..

这些错误:

06-19 06:35:07.180: E/chromium(1759): [ERROR:gl_surface_egl.cc(153)] No suitable EGL configs found.
06-19 06:35:07.180: E/chromium(1759): [ERROR:gl_surface_egl.cc(620)] GLSurfaceEGL::InitializeOneOff failed.
06-19 06:35:07.200: E/chromium(1759): [ERROR:gl_surface_egl.cc(153)] No suitable EGL configs found.
06-19 06:35:07.200: E/chromium(1759): [ERROR:gl_surface_egl.cc(620)] GLSurfaceEGL::InitializeOneOff failed.
06-19 06:35:07.230: E/chromium(1759): [ERROR:gpu_info_collector.cc(86)] gfx::GLSurface::InitializeOneOff() failed
06-19 06:35:12.470: E/chromium(1759): [ERROR:simple_backend_impl.cc(186)] File structure does not match the disk cache backend.
06-19 06:35:12.470: E/chromium(1759): [ERROR:simple_backend_impl.cc(402)] Simple Cache Backend: wrong file structure on disk: /data/data/com.facebook.androidhive/app_webview/Cache
06-19 06:36:38.000: E/chromium(1893): [ERROR:gl_surface_egl.cc(153)] No suitable EGL configs found.
06-19 06:36:38.000: E/chromium(1893): [ERROR:gl_surface_egl.cc(620)] GLSurfaceEGL::InitializeOneOff failed.
06-19 06:36:38.010: E/chromium(1893): [ERROR:gl_surface_egl.cc(153)] No suitable EGL configs found.
06-19 06:36:38.010: E/chromium(1893): [ERROR:gl_surface_egl.cc(620)] GLSurfaceEGL::InitializeOneOff failed.
06-19 06:36:38.010: E/chromium(1893): [ERROR:gpu_info_collector.cc(86)] gfx::GLSurface::InitializeOneOff() failed
06-19 07:36:10.530: E/AndroidRuntime(2428): FATAL EXCEPTION: Thread-94
06-19 07:36:10.530: E/AndroidRuntime(2428): Process: com.facebook.androidhive, PID: 2428
06-19 07:36:10.530: E/AndroidRuntime(2428): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
06-19 07:36:10.530: E/AndroidRuntime(2428):     at android.os.Handler.<init>(Handler.java:200)
06-19 07:36:10.530: E/AndroidRuntime(2428):     at android.os.Handler.<init>(Handler.java:114)
06-19 07:36:10.530: E/AndroidRuntime(2428):     at android.widget.Toast$TN.<init>(Toast.java:327)
06-19 07:36:10.530: E/AndroidRuntime(2428):     at android.widget.Toast.<init>(Toast.java:92)
06-19 07:36:10.530: E/AndroidRuntime(2428):     at android.widget.Toast.makeText(Toast.java:241)
06-19 07:36:10.530: E/AndroidRuntime(2428):     at com.facebook.androidhive.AndroidFacebookConnectActivity$6.onComplete(AndroidFacebookConnectActivity.java:200)
06-19 07:36:10.530: E/AndroidRuntime(2428):     at com.facebook.android.AsyncFacebookRunner$2.run(AsyncFacebookRunner.java:254)

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

与评论中提到的人一样,您必须使用Facebook Graph API,特别是您必须使用来自GraphUser

的来电Request.GraphUserCallback() { ... }

使用以下代码获取Facebook个人资料信息。确保APP_ID文件

中的元数据中包含AndroidManifest.xml

代码:

 private void onSessionStateChange(Session session, SessionState state,
        Exception exception) {
    if (state.isOpened()) {
            Log.i(TAG, "Logged in...");

            /*
             * When callback comes from facebook request user data from
             * facebook and show the results.
             */
            Request.newMeRequest(session, new Request.GraphUserCallback() {

                @Override
                public void onCompleted(GraphUser user, Response response) {
                    if (user != null) {
                        //Enter Code to retrieve information


                    }

                }
            }).executeAsync(); // If .executeAsync() is not called then the
                                // above code does not execute
                                // Async() executes in a parallel thread.
    } else if (state.isClosed()) {
        Log.i(TAG, "Logged out...");
    }

}

public void onCompleted(GraphUser user, Response respoonse)内,你可以像这样提出用户信息请求:

user.getId();
user.getName();
user.getBirthday();

您可以将此信息存储在变量中,或通过以下方式将其传递给其他活动:

Log.w("myConsultant",
                user.getId() + " " + user.getName() + " "
                                        + user.getInnerJSONObject() + " "
                                        + user.getLocation());
                i = new Intent(this, NewActivity.class);
                i.putExtra("Fb_name", user.getName());
                i.putExtra("Fb_location", user.getLocation()
                                .getCity());
                i.putExtra("Fb_id", user.getId());

                Log.i(TAG, " FB USer info fetched");
                i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(i);

然后,您可以在onSessionStateChange内拨打onCreate(),以便在创建活动时检索用户的信息:

Session session = Session.getActiveSession();
    if (session != null && (session.isOpened() || session.isClosed())) {
       onSessionStateChange(session, session.getState(), null);
    }