I am trying to save an Image-Url in my database "User", in addition to other attributes. When I upload the image and do changes in another EditText, it works perfectly fine. But when I try to edit fields without uploading a new image, it crashes with the following error:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.toString()' on a null object reference
String userId;
ImageView user;
Uri imageurl;
StorageReference mStorageRef;
Button upload;
private StorageTask uploadtask;
private Bitmap compressor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.profilbearbeiten);
fAuth = FirebaseAuth.getInstance();
fStore = FirebaseFirestore.getInstance();
FirebaseDatabase database = FirebaseDatabase.getInstance();
mStorageRef= FirebaseStorage.getInstance().getReference().child("Images");
DatabaseReference reference = database.getReference();
userId = fAuth.getCurrentUser().getUid();
fullName = findViewById(R.id.tv_name);
email = findViewById(R.id.tvEmail);
bestätigen = findViewById(R.id.btbestätigen);
ort = findViewById(R.id.tv_address);
telefonummer = findViewById(R.id.tvTel);
interessen = findViewById(R.id.tvInt);
beschreibung = findViewById(R.id.tvBesc);
user = findViewById(R.id.User);
upload = findViewById(R.id.upload);
upload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(uploadtask != null && uploadtask.isInProgress()){
Toast.makeText(ProfilBearbeiten.this, "Upload in Progress", Toast.LENGTH_SHORT).show();
}else{
fileuploader();
}
}
});
user.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
filechooser();
}
});
bestätigen.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// get Information from Edit Text or fileuploader()
final String eemail = email.getText().toString().trim();
final String efullname = fullName.getText().toString();
final String eort = ort.getText().toString();
final String einteresssen = interessen.getText().toString();
final String ebeschreibung = beschreibung.getText().toString();
final String etelefonnummer = telefonummer.getText().toString();
final String image = imageurl.toString();
userId = fAuth.getCurrentUser().getUid();
DocumentReference documentReference = fStore.collection("users").document(userId);
//save edited Information in Database
if (image != null){
Map<String, Object> user = new HashMap<>();
user.put("Benutername", efullname);
user.put("EMail", eemail);
user.put("Ort", eort);
user.put("Interessen", einteresssen);
user.put("Beschreibung", ebeschreibung);
user.put("Telefonnummer", etelefonnummer);
user.put("Image", image);
documentReference.set(user);
}
if (image == null) {
Map<String, Object> user = new HashMap<>();
user.put("Benutername", efullname);
user.put("EMail", eemail);
user.put("Ort", eort);
user.put("Interessen", einteresssen);
user.put("Beschreibung", ebeschreibung);
user.put("Telefonnummer", etelefonnummer);
documentReference.set(user);
}
Intent intent = new Intent(ProfilBearbeiten.this, Profile.class);
startActivity(intent);
}
});
DocumentReference documentReference = fStore.collection("users").document(userId);
documentReference.addSnapshotListener(this, new EventListener<DocumentSnapshot>() {
@Override
public void onEvent(@Nullable DocumentSnapshot documentSnapshot, @Nullable FirebaseFirestoreException e) {
fullName.setText(documentSnapshot.getString("Benutername"));
email.setText(documentSnapshot.getString("EMail"));
ort.setText(documentSnapshot.getString("Ort"));
telefonummer.setText(documentSnapshot.getString("Telefonnummer"));
interessen.setText(documentSnapshot.getString("Interessen"));
beschreibung.setText(documentSnapshot.getString("Beschreibung"));
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode== 1 && resultCode==RESULT_OK && data != null && data.getData() != null){
imageurl=data.getData();
user.setImageURI(imageurl);
}
}
private void filechooser(){
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, 1);
}
private String getExtension(Uri uri) {
ContentResolver cr = getContentResolver();
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
return mimeTypeMap.getExtensionFromMimeType(cr.getType(uri));
}
private void fileuploader () {
StorageReference Ref = mStorageRef.child(System.currentTimeMillis()+","+getExtension(imageurl));
uploadtask = Ref.putFile(imageurl)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
// Get a URL to the uploaded content
Toast.makeText(ProfilBearbeiten.this, "Image Uploaded", Toast.LENGTH_LONG).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle unsuccessful uploads
// ...
}
});
}
}
I tried to catch the error with the if-statements, but it did not work.