база данных android firebase java.lang.String java.lang.Object.toString () 'для ссылки на пустой объект - PullRequest
0 голосов
/ 05 ноября 2018

Пожалуйста, помогите здесь (перед собеседованием)

Я пытаюсь загрузить изображение, когда оно начинает загружаться, оно вылетает и удаляет двух основных детей (изображение, изображение большого пальца)

E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.example.pc.newchatj, PID: 9350 java.lang.NullPointerException: попытка вызвать виртуальный метод 'java.lang.String java.lang.Object.toString ()' для ссылки на пустой объект на com.example.pc.newchatj.SettingsActivity $ 1.onDataChange (SettingsActivity.java:103) на com.google.firebase.database.core.ValueEventRegistration.fireEvent (com.google.firebase: firebase-database @@ 16.0.4: 75) на com.google.firebase.database.core.view.DataEvent.fire (com.google.firebase: firebase-database @@ 16.0.4: 63) на com.google.firebase.database.core.view.EventRaiser $ 1.run (com.google.firebase: firebase-database @@ 16.0.4: 55) на android.os.Handler.handleCallback (Handler.java:739) на android.os.Handler.dispatchMessage (Handler.java:95) на android.os.Looper.loop (Looper.java:135) на android.app.ActivityThread.main (ActivityThread.java:5254) в java.lang.reflect.Method.invoke (родной метод) в java.lang.reflect.Method.invoke (Method.java:372) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:903) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:698)

И в моей базе данных Firebase он удаляет двух детей (image, thumb_image)

кто-нибудь, пожалуйста, помогите

mUserDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

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

            mName.setText(name);
            mStatus.setText(status);

            if (!image.equals("default")) {
                Picasso.get().load(image).placeholder(R.drawable.default_avatar).into(mDisplayImage);
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

Я добавил StorageReference для обоих (изображение, изображение большого пальца)

filepath.putFile(resultUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
                if (task.isSuccessful()){

                    UploadTask uploadTask = thumb_filepath.putBytes(thumb_byte);
                    uploadTask.addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> thumb_task) {

                            if (thumb_task.isSuccessful()){

                                //getting regular image download url
                                filepath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                                    @Override
                                    public void onSuccess(Uri uri) {

                                        download_urll = uri.toString();

                                    }
                                }).addOnFailureListener(new OnFailureListener() {
                                    @Override
                                    public void onFailure(@NonNull Exception e) {
                                        Toast.makeText(SettingsActivity.this, "Regular fail", Toast.LENGTH_SHORT).show();
                                    }
                                });


                                //getting thumbnail download url
                                thumb_filepath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                                    @Override
                                    public void onSuccess(Uri thumb_uri) {

                                        thumb_downloadUrl = thumb_uri.toString();

                                    }
                                }).addOnFailureListener(new OnFailureListener() {
                                    @Override
                                    public void onFailure(@NonNull Exception e) {
                                        Toast.makeText(SettingsActivity.this, "thumb failed", Toast.LENGTH_SHORT).show();
                                    }
                                });


                                Map update_hashMap = new HashMap();
                                update_hashMap.put("image" , download_urll);
                                update_hashMap.put("thumb_image" , thumb_downloadUrl);


                                mUserDatabase.updateChildren(update_hashMap).addOnCompleteListener(new OnCompleteListener<Void>() {
                                    @Override
                                    public void onComplete(@NonNull Task<Void> task) {

                                        if (task.isSuccessful()){
                                            avi_settings.smoothToHide();
                                            avi_settings.setVisibility(View.INVISIBLE);
                                            Toast.makeText(SettingsActivity.this, "Successfully uploaded", Toast.LENGTH_SHORT).show();


                                        }

                                    }
                                });

                            }



                        }
                    });

                    Toast.makeText(SettingsActivity.this, "working", Toast.LENGTH_SHORT).show();
                }else {
                    Toast.makeText(SettingsActivity.this, "Error uploading file", Toast.LENGTH_SHORT).show();
                    avi_settings.smoothToHide();
                    avi_settings.setVisibility(View.INVISIBLE);
                }
                }
            });

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Как вы написали, NullPointerException повышается в строке

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

В сообщении об ошибке говорится, что вы пытаетесь вызвать .toString() для нулевого объекта. Вы должны сохранить результат из String name = dataSnapshot.child("name").getValue() и проверить, не является ли он нулевым, перед вызовом .toSring() метода.

0 голосов
/ 05 ноября 2018

Прежде чем пытаться получить данные из объекта dataSnapshot, вы должны проверить, существуют ли эти данные на самом деле:

mUserDatabase.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        if (dataSnapshot.exists()) { //Check for existens
            String name = dataSnapshot.child("name").getValue(String.class);
            String image = dataSnapshot.child("image").getValue(String.class);
            String status = dataSnapshot.child("status").getValue(String.class);
            String thumb_image = dataSnapshot.child("thumb_image").getValue(String.class);

            mName.setText(name);
            mStatus.setText(status);

            if (!image.equals("default")) {
                Picasso.get().load(image).placeholder(R.drawable.default_avatar).into(mDisplayImage);
            }   
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
});

Также лучше всего передать String.class методу getValue(), который используется для приведения его к String. Вы будете не получать больше NullPointerException.

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