正在上载配置文件图像并继续下一步



我有两个活动。SetupActivity.java和ProfileImageActivity.java.

设置活动.java

public class SetupActivity extends AppCompatActivity
{
@BindView(R.id.setup_name) EditText _nameText;
@BindView(R.id.setup_username) EditText _userNameText;
@BindView(R.id.setup_blood_group) EditText _bloodGroupText;
@BindView(R.id.setup_mobile) EditText _mobileText;
@BindView(R.id.save_profile_button) Button _saveProfileButton;
//private CircleImageView ProfileImage;
private ProgressDialog loadingBar;
private FirebaseAuth mAuth;
private DatabaseReference UsersRef;
String currentUserID;
final static int Gallery_Pick = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setup);
ButterKnife.bind(this);
mAuth = FirebaseAuth.getInstance();
currentUserID = mAuth.getInstance().getCurrentUser().getUid();
UsersRef = FirebaseDatabase.getInstance().getReference().child("Users").child(currentUserID);
loadingBar = new ProgressDialog(this);

_saveProfileButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SaveAccountSetupInformation();
}
});
}
private void SaveAccountSetupInformation()
{
String fullname=_nameText.getText().toString();
String username = _userNameText.getText().toString();
String mobilenumber = _mobileText.getText().toString();
String bloodgroup = _bloodGroupText.getText().toString();
if(TextUtils.isEmpty(username))
{
Toast.makeText(this, "Please write your username...", Toast.LENGTH_SHORT).show();
}
if(TextUtils.isEmpty(mobilenumber))
{
Toast.makeText(this, "Please give your mobile number...", Toast.LENGTH_SHORT).show();
}
if(TextUtils.isEmpty(bloodgroup))
{
Toast.makeText(this, "Please give your exact blood group...", Toast.LENGTH_SHORT).show();
}
if(TextUtils.isEmpty(fullname))
{
Toast.makeText(this, "Please give your fullname..", Toast.LENGTH_SHORT).show();
}
else
{
loadingBar.setTitle("Saving Information");
loadingBar.setMessage("Please wait, while we are creating your new Account...");
loadingBar.show();
loadingBar.setCanceledOnTouchOutside(true);
HashMap userMap = new HashMap();
userMap.put("username", username);
userMap.put("fullname",fullname);
userMap.put("mobilenumber", mobilenumber);
userMap.put("bloodgroup", bloodgroup);
userMap.put("status", "Hey there, i am using Kaarai Siragugal Android App.");
userMap.put("gender", "none");
userMap.put("dob", "none");
userMap.put("relationshipstatus", "none");
UsersRef.updateChildren(userMap).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task)
{
if(task.isSuccessful())
{
SendUserToProfileImageActivity();
Toast.makeText(SetupActivity.this, "your Account is created Successfully.", Toast.LENGTH_LONG).show();
loadingBar.dismiss();
}
else
{
String message =  task.getException().getMessage();
Toast.makeText(SetupActivity.this, "Error Occured: " + message, Toast.LENGTH_SHORT).show();
loadingBar.dismiss();
}
}
});
}
}

private void SendUserToProfileImageActivity()
{
Intent mainIntent = new Intent(SetupActivity.this, ProfileImageActivity.class);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(mainIntent);
finish();
}
}

ProfileImageActivity.java

public class ProfileImageActivity extends AppCompatActivity {
private CircleImageView ProfileImage;
private FirebaseAuth mAuth;
private ProgressDialog loadingBar;
private StorageReference UserProfileImageRef;
String currentUserID;
final static int Gallery_Pick = 1;
@BindView(R.id.save_profile_image_button)
Button _saveProfileImageButton;
private DatabaseReference UsersRef;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile_image);
ButterKnife.bind(this);
mAuth = FirebaseAuth.getInstance();
ProfileImage = (CircleImageView) findViewById(R.id.save_profile_image);
UsersRef = FirebaseDatabase.getInstance().getReference().child("Users").child(currentUserID);
currentUserID = mAuth.getInstance().getCurrentUser().getUid();
UserProfileImageRef = FirebaseStorage.getInstance().getReference().child("Profile Images");
ProfileImage = (CircleImageView) findViewById(R.id.save_profile_image);
loadingBar = new ProgressDialog(this);
_saveProfileImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SaveProfileImage();
}
});
ProfileImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent galleryIntent = new Intent();
galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
galleryIntent.setType("image/*");
startActivityForResult(galleryIntent, Gallery_Pick);
}
});
}


private void SaveProfileImage() {
UsersRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
if (dataSnapshot.hasChild("profileimage")) {
String image = dataSnapshot.child("profileimage").getValue().toString();
Picasso.get().load(image).placeholder(R.drawable.profile).into(ProfileImage);
} else {
Toast.makeText(ProfileImageActivity.this, "Please select profile image first.", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}

@Override
protected void onActivityResult ( int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == Gallery_Pick && resultCode == RESULT_OK && data != null) {
Uri imageUri = data.getData();
CropImage.activity()
.setGuidelines(CropImageView.Guidelines.ON)
.setAspectRatio(1, 1)
.start(this);
}
// Cuando se pulsa en el crop button
if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
CropImage.ActivityResult result = CropImage.getActivityResult(data);
if (resultCode == RESULT_OK) {
loadingBar.setTitle("Profile Image");
loadingBar.setMessage("Wait while we save your image...");
loadingBar.show();
loadingBar.setCanceledOnTouchOutside(true);
Uri resultUri = result.getUri();
StorageReference filePath = UserProfileImageRef.child(currentUserID + ".jpg");
filePath.putFile(resultUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
if (task.isSuccessful()) {
Toast.makeText(ProfileImageActivity.this, "Your image has been saved...", Toast.LENGTH_SHORT).show();
Task<Uri> result = task.getResult().getMetadata().getReference().getDownloadUrl();
result.addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
final String downloadUrl = uri.toString();
UsersRef.child("profileimage").setValue(downloadUrl)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Intent selfIntent = new Intent(ProfileImageActivity.this, ProfileImageActivity.class);
startActivity(selfIntent);
Toast.makeText(ProfileImageActivity.this, "Your Image looks beautiful...", Toast.LENGTH_SHORT).show();
loadingBar.dismiss();
Intent MainIntent=new Intent(ProfileImageActivity.this,MainActivity.class);
startActivity(MainIntent);
MainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
finish();
} else {
String message = task.getException().getMessage();
Toast.makeText(ProfileImageActivity.this, "Error: " + message, Toast.LENGTH_SHORT).show();
loadingBar.dismiss();
}
}
});
}
});
}
}
});
} else {
Toast.makeText(ProfileImageActivity.this, "Error: n" + "The image has not been cropped well. Try again.", Toast.LENGTH_SHORT).show();
loadingBar.dismiss();
}
}
}
}

SetupActivity.java获取用户信息,如姓名、用户名、血型和手机号码,并将其保存到Firebase数据库中。它运行良好。ProfileImageActivity.java应该获取用户的裁剪后的配置文件图像,并必须将其保存到用户的数据库中。对于裁剪,我使用了github的存储库。setupActivity之后,应用程序崩溃,显示

Caused by: java.lang.NullPointerException: Can't pass null for argument 'pathString' in child()
at com.google.firebase.database.DatabaseReference.child(com.google.firebase:firebase-database@@16.0.5:101)
at blackevil.com.kaaraisiragugal.ProfileImageActivity.onCreate(ProfileImageActivity.java:52)

应用程序也会退出,但SetupActivity中提供的信息会正确保存到数据库中。此外,我还需要停止用户从ProfileImageActivity转到下一个活动,而不选择配置文件映像。

在您的代码中,您有

UsersRef = FirebaseDatabase.getInstance().getReference().child("Users").child(currentUserID);
currentUserID = mAuth.getInstance().getCurrentUser().getUid();

.child(currentUserID)中,currentUserID为null,因为您在第二行中获得了currentUserID。

说真的!?

应该如下所示:

currentUserID = mAuth.getInstance().getCurrentUser().getUid();
UsersRef = FirebaseDatabase.getInstance().getReference().child("Users").child(currentUserID);

尝试检查字符串路径是否为null。先做条件,然后在毕加索的作品中展出。

if (image!=null && !TextUtils.isEmpty(image))
Picasso.get().load(image).placeholder(R.drawable.profile).into(ProfileImage);

最新更新