我已经photolink
在另一个字符串中复制了字符串的值,PhotoLink1
但是这个值只在URI
方法中而不是在方法之外,我不知道如何获取值或者有什么我想念的。请告诉我如何获得此值或我应该如何使此代码工作。我搜索了很多关于这个的问题,但我无法得到解决方案。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setup);
Toolbar toolbar = (Toolbar)findViewById(R.id.setup_toolbar);
setSupportActionBar(toolbar);
firebaseAuth= FirebaseAuth.getInstance();
firestore = FirebaseFirestore.getInstance();
storageReference=FirebaseStorage.getInstance().getReference();
getSupportActionBar().setTitle("Account Setup");
circleImageView=(CircleImageView)findViewById(R.id.imageView);
n=(EditText)findViewById(R.id.name_txt_up);
s=(Button)findViewById(R.id.save_set_button);
s.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final String user = n.getText().toString().trim();
if(!TextUtils.isEmpty(user) && imageURI!=null)
{
String user_id= firebaseAuth.getCurrentUser().getUid();
StorageReference img_path = storageReference.child("profile_image").child(user_id+ ".jpg");
img_path.putFile(imageURI).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
if(task.isSuccessful())
{
Task<Uri> task_uri = task.getResult().getMetadata().getReference().getDownloadUrl();
task_uri.addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
String photoLink = uri.toString();
getImageUri(photoLink);
Toast.makeText(Setup_Activity.this, ""+photoLink, Toast.LENGTH_SHORT).show();
Log.d("photLink", ""+PhotoLink1);
}
});
Map<String,String > userMap= new HashMap<>();
userMap.put("name",user);
userMap.put("image", PhotoLink1);
firestore.collection("Users").document().set(userMap).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful())
{
Toast.makeText(Setup_Activity.this, "This is good", Toast.LENGTH_SHORT).show();
}
else
{
String err= task.getException().getMessage();
Toast.makeText(Setup_Activity.this, "Error "+err, Toast.LENGTH_SHORT).show();
}
}
});
}
else
{
String err= task.getException().getMessage();
Toast.makeText(Setup_Activity.this, "Error "+err, Toast.LENGTH_SHORT).show();
}
}
});
}
else
{
Toast.makeText(Setup_Activity.this, "Empty Text Fields", Toast.LENGTH_SHORT).show();
}
}
});
circleImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
{
if(ContextCompat.checkSelfPermission(Setup_Activity.this, Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED)
{
Toast.makeText(Setup_Activity.this, "Permission Denied", Toast.LENGTH_SHORT).show();
ActivityCompat.requestPermissions(Setup_Activity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);
}
else
{
getImage();
}
}
else
{
getImage();
}
}
});
}
private void getImageUri(String photoLink) {
PhotoLink1 =photoLink;
}
public void getImage(){
CropImage.activity()
.setGuidelines(CropImageView.Guidelines.ON)
.start(Setup_Activity.this);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
CropImage.ActivityResult result = CropImage.getActivityResult(data);
if (resultCode == RESULT_OK) {
imageURI = result.getUri();
circleImageView.setImageURI(imageURI);
} else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
Exception error = result.getError();
}
}
}
当您尝试userMap
使用以下代码行将这些值添加到您的时:
Map<String,String > userMap = new HashMap<>();
userMap.put("name",user);
userMap.put("image", PhotoLink1);
在photoLink
从火力地堡储存未完成加载但,这是因为你已经添加到您的听众task_uri
对象被你的任务完成之后,以后调用的时候一些未知量。您不知道要花多长时间,可能需要几百毫秒到几秒的时间才能photoLink
真正可用。该onSuccess()
方法具有异步行为,这就是您无法photoLink
以这种方式获得该行为的原因。
快速解决此问题的方法是将所有与向 , 中添加数据相关的代码块移动到方法userMap
内部onSuccess()
。在此您正在等待回调,photoLink
您将可用。否则,我建议您从这篇文章中查看我的 anwser 的最后一部分,其中我解释了如何使用自定义回调来完成。您也可以观看此视频以更好地理解。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句