我一次在Firestore中上传多张照片,所以我使用asynctask的doInBackground方法中的循环上传,然后我希望所有照片都链接到post方法中,但它无法正常工作。 在完成上传post方法之前,要开始执行。
请给我一些解决方法
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... voids) {
for (int i = 0;i<localphotos.size();i++){
storageref = FirebaseStorage.getInstance().getReference("Product/"+System.currentTimeMillis()+".jpg");
uploadtask = storageref.putFile(localphotos.get(i))
.addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
if (task.isSuccessful()) {
Uri downloadUrl = task.getResult().getDownloadUrl();
photolink.add(String.valueOf(downloadUrl));
}
}
});
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
LinkedList<String> size1 = new LinkedList<String>();
LinkedList<String> color1 = new LinkedList<String>();
final String[] s = size.getText().toString().split("/");
final String[] c = color.getText().toString().split("/");
final String key = ref.push().getKey();
Product product = new Product(key,
category.getText().toString(),
photolink,
deep.getText().toString(),
basic.getText().toString(),
Integer.parseInt(price.getText().toString()),
offer.getText().toString(),
brand.getText().toString(),
c,
s,
photolink.get(Integer.parseInt(mainphoto.getText().toString())-1));
ref.child(key).setValue(product).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
Toast.makeText(product_detail_add.this, "Product added", Toast.LENGTH_SHORT).show();
finish();
}
else {
Toast.makeText(product_detail_add.this, task.getException().getMessage(), Toast.LENGTH_SHORT).show();
progressBar2.setVisibility(View.GONE);
}
}
});
}
}.execute();
答案 0 :(得分:0)
您已经在Async任务中实现了监听器(本质上是异步的)。这里不需要异步任务。
相反,
onComplete()
内的内容onPostExecute()
移至另一种方法,例如postExecution()
postExecution()