删除值firebase android时出错

问题描述 投票:1回答:1

这是我的第一个使用Firebase的Android项目,我试图在从Firebase加载后使用AlertDialog删除选定的值,但我的应用程序崩溃了。我没有得到如何解决这个错误。

第104行是这个String name = dataSnapshot.child("name").getValue().toString();

PlaceActivity .java

public class PlaceActivity extends AppCompatActivity {

    private FloatingActionButton mAddPlaceFloatButton;
    private DatabaseReference mUserPlaceDatabase, mPlaceDatabase;
    private RecyclerView mUserPlaceList;
    private Toolbar mToolbar;
    private FirebaseUser mCurrentUser;
    private String currentUid;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_place);

        mAddPlaceFloatButton = (FloatingActionButton) findViewById(R.id.addplace_button);
        mToolbar = (Toolbar) findViewById(R.id.add_app_bar);


        setSupportActionBar(mToolbar);
        getSupportActionBar().setTitle("Maintain");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();
        currentUid = mCurrentUser.getUid();
        mUserPlaceDatabase = FirebaseDatabase.getInstance().getReference().child("Owner").child(currentUid);
        mPlaceDatabase = FirebaseDatabase.getInstance().getReference().child("Places");


        mUserPlaceList = (RecyclerView) findViewById(R.id.user_place_list);
        mUserPlaceList.setHasFixedSize(true);
        mUserPlaceList.setLayoutManager(new LinearLayoutManager(this));


        mAddPlaceFloatButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent editIntent = new Intent(PlaceActivity.this, AddPlacesActivity.class);
                startActivity(editIntent);

            }
        });



    }

    @Override
    protected void onStart() {
        super.onStart();

        mUserPlaceDatabase = FirebaseDatabase.getInstance().getReference().child("Owner").child(currentUid);

        FirebaseRecyclerAdapter<Owner, OwnerViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Owner, OwnerViewHolder>(

                Owner.class,
                R.layout.place_single_layout,
                OwnerViewHolder.class,
                mUserPlaceDatabase



        ) {
            @Override
            protected void populateViewHolder(final OwnerViewHolder viewHolder, Owner model, final int position) {

                final String user_id = getRef(position).getKey();
                mPlaceDatabase.child(user_id).addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(final DataSnapshot dataSnapshot) {

                        String name = dataSnapshot.child("name").getValue().toString();
                        String price = dataSnapshot.child("price").getValue().toString();
                        String image = dataSnapshot.child("thumb_image").getValue().toString();

                        viewHolder.setName(name);
                        viewHolder.setPrice(price);
                        viewHolder.setThumb_image(image, getApplicationContext());


                        viewHolder.mView.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View view) {

                                CharSequence option[] = new CharSequence[]{"Edit", "Delete"};
                                AlertDialog.Builder builder = new AlertDialog.Builder(PlaceActivity.this);
                                builder.setTitle("Select Options");
                                builder.setItems(option, new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialogInterface, int i) {
                                        if (i == 0){

                                            Intent editIntent = new Intent(PlaceActivity.this, EditPlacesActivity.class);
                                            editIntent.putExtra("user_id", user_id);
                                            startActivity(editIntent);

                                        }
                                        if (i == 1){

                                            Intent editIntent = new Intent(PlaceActivity.this, AccountFragment.class);
                                            startActivity(editIntent);

                                        }
                                    }
                                });
                                builder.show();

                            }
                        });


                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });

            }
        };
        mUserPlaceList.setAdapter(firebaseRecyclerAdapter);



    }


    public static class OwnerViewHolder extends RecyclerView.ViewHolder{

        View mView;

        public OwnerViewHolder(View itemView) {
            super(itemView);

            mView = itemView;
        }

        public void setName(String name){

            TextView mPlaceName = (TextView) mView.findViewById(R.id.place_name);
            mPlaceName.setText(name);

        }

        public void setPrice(String price) {
            TextView mPlaceStatus = (TextView) mView.findViewById(R.id.place_price);
            mPlaceStatus.setText(price);
        }


        public void setThumb_image(final String thumb_image, final Context ctx){

            final ImageView mPlaceImage = (ImageView) mView.findViewById(R.id.place_image);
            Picasso.with(ctx).load(thumb_image).networkPolicy(NetworkPolicy.OFFLINE).placeholder(R.drawable.palceholder).into(mPlaceImage, new Callback() {
                @Override
                public void onSuccess() {

                }

                @Override
                public void onError() {
                    Picasso.with(ctx).load(thumb_image).placeholder(R.drawable.palceholder).into(mPlaceImage);

                }
            });

        }


    }
}

这是我的Firebase数据库结构Firebase Database Structure

日志:

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.kadek.tripgo, PID: 15594
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
  at com.kadek.tripgo.PlaceActivity$2$1.onDataChange(PlaceActivity.java:104)
  at com.google.android.gms.internal.to.zza(Unknown Source)
  at com.google.android.gms.internal.vj.zzHX(Unknown Source)
  at com.google.android.gms.internal.vp.run(Unknown Source)
  at android.os.Handler.handleCallback(Handler.java:751)
  at android.os.Handler.dispatchMessage(Handler.java:95)
  at android.os.Looper.loop(Looper.java:154)
  at android.app.ActivityThread.main(ActivityThread.java:6823)
  at java.lang.reflect.Method.invoke(Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1563)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1451)
android firebase android-alertdialog
1个回答
0
投票
  • 首先确保您在Firebase控制台的mPlaceDatabase中拥有子项(名称,价格,thumb_image)。
  • 如果它们没问题,请在onDataChange中尝试:
if (dataSnapshot.exists()) {
String name = dataSnapshot.child("name").getValue().toString();
String price = dataSnapshot.child("price").getValue().toString();
String image = dataSnapshot.child("thumb_image").getValue().toString();
viewHolder.setName(name);
viewHolder.setPrice(price);
viewHolder.setThumb_image(image, getApplicationContext());
}
© www.soinside.com 2019 - 2024. All rights reserved.