【问题标题】:Getting 'Failed to bounce to type' exception even after giving the accurate firebase reference. Please see details即使在提供准确的 firebase 参考后,也会出现“无法弹回输入”异常。请查看详情
【发布时间】:2016-03-28 03:21:14
【问题描述】:

我正在开发一个将Firebase 用作BaaS 的应用程序。

问题是我得到com.firebase.client.FirebaseException: Failed to bounce to type at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:183) at com.abc.xyz.MainActivity$2.onDataChange(MainActivity.java:119) 即使在提供了正确的firebase 参考之后。堆栈跟踪中另一个值得注意的行是Caused by: com.fasterxml.jackson.databind.JsonMappingException: Conflicting setter definitions for property "colorFilter": android.widget.ImageView#setColorFilter(1 params) vs android.widget.ImageView#setColorFilter(1 params)

这里是Firebase 参考:Firebase mFirebaseRef = new Firebase("https://appname.firebaseio.com/users");

这是我的一段代码:

    mFirebaseRef.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot snapshot) {
                        System.out.println("There are " + snapshot.getChildrenCount() + " blog posts");
                        for (DataSnapshot postSnapshot : snapshot.getChildren()) {
    //error on this line 
UsersDataFromFirebase post = postSnapshot.getValue(UsersDataFromFirebase.class);

                            View nameView = navigationView.getHeaderView(0);
                            userName = (TextView) nameView.findViewById(R.id.userName);
                            userName.setText(post.getUserName());

                            System.out.println(post.getUserName());
                            System.out.println(post.getUserEmail());

    //                        View emailView = navigationView.getHeaderView(0);
    //                        userEmail = (TextView) emailView.findViewById(R.id.userEmail);
    //                        userEmail.setText();

                            userImageUrl = (URL) authData.getProviderData().get("profileImageUrl");

                            String userImageUrlString = userImageUrl.toString();

                            URL url = null;
                            try {
                                url = new URL(userImageUrlString);
                            } catch (MalformedURLException e) {
                                e.printStackTrace();
                            }
                            try {
                                image = BitmapFactory.decodeStream(url.openConnection().getInputStream());
                            } catch (IOException e) {
                                e.printStackTrace();
                            }

                            View imageView = navigationView.getHeaderView(0);
                            userImage = (ImageView) imageView.findViewById(R.id.userImage);
                            userImage.setImageBitmap(image);

                        }
                    }

                    @Override
                    public void onCancelled(FirebaseError firebaseError) {
                        System.out.println("The read failed: " + firebaseError.getMessage());
                        Toast.makeText(getBaseContext(), firebaseError.getMessage(), Toast.LENGTH_LONG).show();
                    }
                });

            } else {
                android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(MainActivity.this);
                builder.setTitle("No internet connection!");
                builder.setMessage("Please connect to the internet.");
                builder.setPositiveButton("Open Settings", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        Intent intent = new Intent(Settings.ACTION_SETTINGS);
                        startActivity(intent);
                        //progressBar.setVisibility(View.INVISIBLE);
                    }
                });
                builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        //progressBar.setVisibility(View.INVISIBLE);
                    }
                });
                builder.show();
            }

这是UsersDataFromFirebase.java文件的代码:

public class UsersDataFromFirebase {
    private String userName;
    private String userEmail;
    private ImageView userImage;

    public UsersDataFromFirebase() {
        // empty default constructor, necessary for Firebase to be able to deserialize blog posts
    }

    public String getUserName() {
        return userName;
    }

    public String getUserEmail() {
        return userEmail;
    }

    public ImageView getUserImage() {
        return userImage;
    }

}

由于Firebase 对我来说是新事物,我无法弄清楚这里出了什么问题。

请告诉我。

提前致谢!

【问题讨论】:

  • 代码中的哪一行是 MainActivity.java:119?另外:添加 JSON 的 sn-p,您可以通过单击 Firebase 仪表板中的“导出”按钮轻松获取。
  • @FrankvanPuffelen 我已经提到了我遇到错误的那一行。 JSON 片段:{ "users" : { "20fb1a2a-5658-4b36-af28-c807dc6b187a" : { "userEmail" : "hns.billion@gmail.com", "userName" : "Hammad Nasir" } } }
  • @FrankvanPuffelen 请回复...

标签: java android firebase firebase-realtime-database


【解决方案1】:

您在 Java 类中包含了一个 ImageView,Jackson/Firebase 不知道如何将数据序列化到该类中。

解决方案是告诉 Firebase/Jackson 在从 JSON 读取对象/将其写入 JSON 时忽略 ImageView。

public class UsersDataFromFirebase {
    private String userName;
    private String userEmail;
    private ImageView userImage;

    public UsersDataFromFirebase() {
        // empty default constructor, necessary for Firebase to be able to deserialize blog posts
    }

    public String getUserName() { return userName; }

    public String getUserEmail() { return userEmail; }

    @JsonIgnore    
    public ImageView getUserImage() { return userImage; }
}

请注意,我对这个问题的回答中涵盖了这一点:Why do I get "Failed to bounce to type" when I turn JSON from Firebase into Java objects?

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-10-17
  • 1970-01-01
  • 1970-01-01
  • 2023-01-16
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 2016-10-25
相关资源
最近更新 更多