java - Facebook onCompleted() 中的 NullPointerException

标签 java android facebook

我的应用发生崩溃,无法在我的任何设备上重现。

我的 Crashlytics 返回三个问号 ???并给出堆栈跟踪如下:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
   at myproject.app.android.SignLog.SignLogFragment$2.onCompleted()
   at com.facebook.Request$1.onCompleted()
   at com.facebook.Request$4.run()
   at android.os.Handler.handleCallback(Handler.java:739)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:145)
   at android.app.ActivityThread.main(ActivityThread.java:6141)
   at java.lang.reflect.Method.invoke(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:372)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

据说空指针异常是由在空对象上调用 toString() 引起的,但这都是在 try catch block 中调用的,所以我很困惑即使有空。

                @Override
                public void onCompleted(GraphUser user, Response response) {

                    if (response.getError() == null && user != null)
                    {
                        try {
                            params.put("first_name", user.getFirstName());
                            params.put("last_name", user.getLastName());
                            params.put("email_address", user.getProperty("email").toString());
                            params.put("user_gender", user.getProperty("gender").toString());

                            String image = "http://graph.facebook.com/" + user.getId() + "/picture?type=large";
                            try {
                                byte[] data = image.getBytes("utf-8");
                                image = Base64.encodeToString(data, Base64.DEFAULT);
                                image = image.replaceAll("(?:\\r\\n|\\n\\r|\\n|\\r)", "");
                            } catch (Exception e) {
                            }
                            params.put("image_url", image);
                            params.put("social_access_token", session.getAccessToken());
                            params.put("social_user_identifier", user.getId());
                            params.put("social_login_source", "Facebook");

                            NetworkTaskHandler nHandler = new NetworkTaskHandler(getActivity(), true);

                            String url = "social_login";
                            nHandler.callAsyncTask(params, url, "Logging in...", true, new AsyncTaskCompleteListener() {

                                @Override
                                public void onAsyncTaskComplete(String response, boolean success) {

                                    if (success == true) {
                                        setUpUserDetails(response);
                                    } else {
                                        Toast.makeText(getActivity(), response, Toast.LENGTH_SHORT).show();
                                        callFacebookLogout();
                                    }
                                }


                            });
                        }catch(Exception e)
                        {
                            Toast.makeText(getActivity(), "Could not log in", Toast.LENGTH_SHORT).show();
                            revokeFacebookPermissions(session);
                            callFacebookLogout();
                        }
                    }
                    else
                    {
                        Toast.makeText(getActivity(), "Could not log in", Toast.LENGTH_SHORT).show();
                        revokeFacebookPermissions(session);
                        callFacebookLogout();
                    }
                }

正如我上面所说,我实际上无法重现此崩溃,但我的一些应用程序用户正在发生这种情况,主要是在 HTC one(m8) 和三星 Galaxy S6 上。

最佳答案

检查属性 emailgender:

params.put("email_address", user.getProperty("email") != null ? user.getProperty("email").toString() : "");
params.put("user_gender", user.getProperty("gender") != null ? user.getProperty("gender").toString() : "");

已更新

关于java - Facebook onCompleted() 中的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31296694/

相关文章:

java - 在 30GB XML 数据集上搜索正则表达式模式。使用16GB内存

java - 如何从 int 转换为 byte,然后使用位移运算符

java - 您将如何检查 Java 中的 char 是否可键入?

java - 不允许启动服务 Intent 未经许可不从 uid 导出

facebook - 更改 FB 登录按钮文本 (react-native-fbsdk)

php - Facebook 分享按钮显示错误图片

java - DAO 和依赖注入(inject),建议?

android - 如何在android studio中调整抽屉导航的宽度

Android SQLite 不能在单独的类中工作

ios - 如何在适用于 iOS 的 Facebook SDK 中定义 "GeoPoint"属性