Я получил это E / AndroidRuntime: FATAL EXCEPTION: main в моем проекте Android Studio - PullRequest
0 голосов
/ 21 апреля 2020

E / AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.example.videocallproject, PID: 25602 com.google. android .gms.tasks.RuntimeExecutionException: java .lang.NullPointerException: выбросить с нулевым исключением в com .google. android .gms.tasks.zzn.getResult (неизвестный источник: 18) по адресу com.example.videocallproject.SettingsActivity $ 4.onComplete (SettingsActivity. java: 152) по адресу com.google. android .gms .tasks.zzf.run (неизвестный источник: 23) в android .os.Handler.handleCallback (обработчик. java: 873) в android .os.Handler.dispatchMessage (обработчик. java: 99) в android .os.Looper.l oop (Looper. java: 224) в android .app.ActivityThread.main (ActivityThread. java: 7056) в java .lang.reflect. Method.invoke (собственный метод) в com. android .internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit. java: 536) в com. android .internal.os.ZygoteInit.main (ZygoteInit. java: 876) Причина: java .lang.NullPointerException: выбросить с нулевым исключением в com.example.videocallproject.SettingsActivity $ 5.then (SettingsActivity. java: 1 40) на com.example.videocallproject.SettingsActivity $ 5.then (SettingsActivity. java: 134) на com.google.firebase.storage.zzp.onComplete (неизвестный источник: 4) на com.google.firebase.storage.zzl .zzi (неизвестный источник: 13) на com.google.firebase.storage.zzaa.run (неизвестный источник: 10) на android .os.Handler.handleCallback (обработчик. java: 873) на android. os.Handler.dispatchMessage (Обработчик. java: 99) в android .os.Looper.l oop (Looper. java: 224) в android .app.ActivityThread.main (ActivityThread. java: 7056) в java .lang.reflect.Method.invoke (собственный метод) в com. android .internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit. java: 536) в com. android .internal.os.ZygoteInit.main (ZygoteInit. java: 876)

Код:

package com.example.videocallproject;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.app.ProgressDialog;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import com.google.android.gms.tasks.Continuation;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import com.squareup.picasso.Picasso;

import java.util.HashMap;

public class SettingsActivity extends AppCompatActivity
{
    //MEMANGGIL VARIABLE
    private Button saveBtn;
    private EditText UserName, Status;
    private ImageView fotoProfil;


    private static int GalleryPictures = 1;
    private Uri UriImage;
    private StorageReference UserProfileStorageReference;
    private String downloadUrl;
    private DatabaseReference UserReference;
    private ProgressDialog progressDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);

        UserProfileStorageReference = FirebaseStorage.getInstance().getReference().child("Profile Images"); //ruang penyimpanan file
        UserReference = FirebaseDatabase.getInstance().getReference().child("Users"); //sebagai realtime database


        saveBtn = findViewById(R.id.save_settings);  //memanggil button save
        UserName = findViewById(R.id.settings_username); //memanggil username
        Status = findViewById(R.id.settings_status); //memanggil status
        fotoProfil = findViewById(R.id.settings_image_profile); //memanggil profil
        progressDialog = new ProgressDialog(this);


        fotoProfil.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                Intent galleryIntent = new Intent();
                galleryIntent.setAction(Intent.ACTION_GET_CONTENT); //perintah mengakses gallery android.
                galleryIntent.setType("image/*"); // format yang bisa diupload
                startActivityForResult(galleryIntent, GalleryPictures); //mulai aktivitas


            }
        });

        saveBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                saveUserData();
            }
        });
        mengambilInfoUser();
    }

    private void saveUserData()
    {
        final String getUsername = UserName.getText().toString(); //menyimpan username yang dimasukan pada profile
        final String getStatus = UserName.getText().toString(); //menyimpan status

        if (UriImage == null)
        {
            UserReference.addValueEventListener(new ValueEventListener() //Untuk mengecek profile image telah di set atau tidak
            {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot)
                {
                    if (dataSnapshot.child(FirebaseAuth.getInstance().getCurrentUser().getUid()).hasChild("image")) //jika profile image telah ada
                    {
                        UserInfoTanpaImage();
                    }
                    else
                    {
                        Toast.makeText(SettingsActivity.this, "Select Your Image", Toast.LENGTH_SHORT).show();
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
        }
        else if (getUsername.equals("")) //jika username kosong
        {
            Toast.makeText(this, "Please Input your Username", Toast.LENGTH_SHORT).show();
        }
        else if (getStatus.equals("")) //jika status kosong
        {
            Toast.makeText(this, "Please Input your Status", Toast.LENGTH_SHORT).show();
        }
        else //Untuk menyimpan settingan profile
        {
            progressDialog.setTitle("Account Settings");
            progressDialog.setMessage("Updating account settings please wait...");
            progressDialog.show();
            final StorageReference filePath = UserProfileStorageReference.child(FirebaseAuth.getInstance().getCurrentUser().getUid());

            final UploadTask uploadTask = filePath.putFile(UriImage);

            uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
                @Override
                public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception
                {
                    if (task.isSuccessful())
                    {
                        throw task.getException();
                    }

                    downloadUrl = filePath.getDownloadUrl().toString(); //Image url yang akan dipilih dan diambil melalui getDownloadUrl
                    return filePath.getDownloadUrl();
                }
            }).addOnCompleteListener(new OnCompleteListener<Uri>() {
                @Override
                public void onComplete(@NonNull Task<Uri> task)
                {
                    if (task.isSuccessful());
                    {
                        downloadUrl = task.getResult().toString(); //jika url Image url berhasil didownload maka tampil hasil beruba string.


                    if (getUsername.equals("")) //jika username kosong
                    {
                        Toast.makeText(SettingsActivity.this, "Please Input your Username", Toast.LENGTH_SHORT).show();
                    }
                    else if (getStatus.equals("")) //jika status kosong
                    {
                        Toast.makeText(SettingsActivity.this, "Please Input your Status", Toast.LENGTH_SHORT).show();
                    }
                    else //Untuk menyimpan settingan profile
                    {


                        HashMap<String, Object> profileMap = new HashMap<>();
                        profileMap.put("uid", FirebaseAuth.getInstance().getCurrentUser().getUid());
                        profileMap.put("Name", getUsername);
                        profileMap.put("Status", getStatus);
                        profileMap.put("image", downloadUrl);

                        UserReference.child(FirebaseAuth.getInstance().getCurrentUser().getUid()).updateChildren(profileMap).addOnCompleteListener(new OnCompleteListener<Void>()
                        {
                            @Override
                            public void onComplete(@NonNull Task<Void> task)
                            {
                                if (task.isSuccessful())
                                {
                                    Intent intent = new Intent(SettingsActivity.this, MainActivity.class);
                                    startActivity(intent);
                                    finish();
                                    progressDialog.dismiss();

                                    Toast.makeText(SettingsActivity.this, "Profile has been updated successfully", Toast.LENGTH_SHORT).show();
                                }
                            }
                        });
                    }

                    }
                }
            });

        }
    }

    private void UserInfoTanpaImage() {
        final String getUsername = UserName.getText().toString();
        final String getStatus = UserName.getText().toString();



        if (getUsername.equals("")) //jika username kosong
        {
            Toast.makeText(SettingsActivity.this, "Please Input your Username", Toast.LENGTH_SHORT).show();
        } else if (getStatus.equals("")) //jika status kosong
        {
            Toast.makeText(SettingsActivity.this, "Please Input your Status", Toast.LENGTH_SHORT).show();
        } else //Untuk menyimpan settingan profile
        {
            progressDialog.setTitle("Account Settings");
            progressDialog.setMessage("Updating account settings please wait...");
            progressDialog.show();

            HashMap<String, Object> profileMap = new HashMap<>();
            profileMap.put("uid", FirebaseAuth.getInstance().getCurrentUser().getUid());
            profileMap.put("Name", getUsername);
            profileMap.put("Status", getStatus);

            UserReference.child(FirebaseAuth.getInstance().getCurrentUser().getUid()).updateChildren(profileMap).addOnCompleteListener(new OnCompleteListener<Void>()
            {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        Intent intent = new Intent(SettingsActivity.this, MainActivity.class);
                        startActivity(intent);
                        finish();
                        progressDialog.dismiss();

                        Toast.makeText(SettingsActivity.this, "Profile has been updated successfully", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }


        }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)
    {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode==GalleryPictures && resultCode==RESULT_OK && data!=null)
        {
            UriImage = data.getData(); //memasukan file kedalam uri
            fotoProfil.setImageURI(UriImage); //menampilkan file
        }
    }

    private void mengambilInfoUser()
    {
        UserReference.child(FirebaseAuth.getInstance().getCurrentUser().getUid()).addValueEventListener(new ValueEventListener()
        {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot)
            {
                if (dataSnapshot.exists())
                {
                    String imageDb = dataSnapshot.child("image").getValue().toString();
                    String NameDb = dataSnapshot.child("Name").getValue().toString();
                    String StatusDb = dataSnapshot.child("Status").getValue().toString();

                    UserName.setText(NameDb);
                    Status.setText(StatusDb);
                    Picasso.get().load(imageDb).placeholder(R.drawable.profile_image).into(fotoProfil);
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

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