我有一个工作的Uploadfile()过程,但我想改变它在一个线程而不是主ui线程上运行 . 我不完全理解你必须传递的类型,即参数,进度,结果我的工作代码:
private void Uploadfile(){
if (imageUri != null){
StorageReference fileReference = StorageRef.child(System.currentTimeMillis() + "." + getFileExtension(imageUri));
uploadtask = fileReference.putFile(imageUri)
.addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Toast.makeText(gallery.this, "Upload successful", Toast.LENGTH_SHORT).show();
Upload upload= new Upload(Filename.getText().toString().trim(),
taskSnapshot.getDownloadUrl().toString());
//create new database entry with unique image id
String uploadId = DBREF.push().getKey();
DBREF.child(uploadId).setValue(upload);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(gallery.this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
}).addOnProgressListener(new OnProgressListener() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
}
});
}
else {
Toast.makeText(this, "no file selected",Toast.LENGTH_SHORT).show();
}
}
And the thread i tried to write:
private class Uploadfile extends AsyncTask {
protected Void doInBackground(URL... urls) {
if (imageUri != null) {
StorageReference fileReference = StorageRef.child(System.currentTimeMillis()
+ "." + getFileExtension(imageUri));
uploadtask = fileReference.putFile(imageUri)
.addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Upload upload = new Upload(Filename.getText().toString().trim(),
taskSnapshot.getDownloadUrl().toString());
//create new database entry with unique image id
String uploadId = DBREF.push().getKey();
DBREF.child(uploadId).setValue(upload);
}
});
}
return null;
}
protected void onPostExecute(Void result) {
}
}
我不知道该传递给onPostExecute()函数,欢迎任何帮助