在android studio

时间:2018-04-26 17:37:12

标签: android

我有一个工作的Uploadfile()进程,但我想改变它在线程而不是主ui线程上运行。我不完全理解你必须通过的类型,即参数,进度,结果 我的工作代码:

private void Uploadfile(){
            if (imageUri != null){

StorageReference fileReference = StorageRef.child(System.currentTimeMillis() + "." + getFileExtension(imageUri));
                uploadtask = fileReference.putFile(imageUri)
                        .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                            @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<UploadTask.TaskSnapshot>() {
                    @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<URL, Void, Void> { protected Void doInBackground(URL... urls) { if (imageUri != null) { StorageReference fileReference = StorageRef.child(System.currentTimeMillis() + "." + getFileExtension(imageUri)); uploadtask = fileReference.putFile(imageUri) .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { @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()函数的内容,任何帮助欢迎

1 个答案:

答案 0 :(得分:0)

在onPostResult中,您回调调用者,以便它知道任务已完成。

android asynctask sending callbacks to ui