1. 程式人生 > >AsyncTask成功後回撥執行呼叫者的方法

AsyncTask成功後回撥執行呼叫者的方法

package world.hello.tasksuccall;

import android.os.AsyncTask;
import android.util.Log;

import static android.content.ContentValues.TAG;

//第一個引數是傳入的引數
//第二個引數是介面重新整理時候用的引數
//第三個引數是返回的引數
public class GetLocalVideosTask extends AsyncTask<Void, Integer, String> {

    //重新整理介面的部分
    @Override
    protected
void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); Log.d(TAG, "onProgressUpdate: "+values+" 這裡可以顯示介面"); } @Override protected String doInBackground(Void... voids) { for (int i = 0; i < 1000; i++) { //當到500時候重新整理介面 if (i==500
)publishProgress(i); } return "abc.mp4"; } @Override protected void onPostExecute(String videoName) { super.onPostExecute(videoName); this.onSuccessListener.onSuccess(videoName); } //建立介面,成功時候回撥 private OnSuccessListener onSuccessListener; public
interface OnSuccessListener { void onSuccess(String videoName); } public void setOnSuccessListener(OnSuccessListener onSuccessListener) { this.onSuccessListener = onSuccessListener; } }
package world.hello.tasksuccall;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements GetLocalVideosTask.OnSuccessListener {

    GetLocalVideosTask getLocalVideosTask;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getLocalVideosTask=new GetLocalVideosTask();
        getLocalVideosTask.setOnSuccessListener(this);
        getLocalVideosTask.execute();
    }

//成功時候回撥執行
    @Override
    public void onSuccess(String videoName) {
        Toast.makeText(MainActivity.this,videoName,Toast.LENGTH_LONG).show();
    }
}

2018年4月12日
新增 eclipse上的java程式碼例子

package demo;

public class DownloadUI {

    /**
     * @param args
     * @throws InterruptedException 
     */
    public static void main(String[] args) throws InterruptedException {
        // TODO Auto-generated method stub
        DownloadUtils.instance().download(new MyDownloadListener());
        System.out.print("阻塞等待");
    }

    private static class MyDownloadListener implements DownloadListener {

        public void onDownloading(int progress) {
            // TODO Auto-generated method stub
            System.out.print("進度"+progress+"\n\r");
        }

        public void onDownloaded() {
            // TODO Auto-generated method stub
            System.out.print("完成"+"\n\r");
        }

    }

}

interface DownloadListener {
    public void onDownloading(int progress);// 下載中的函式

    public void onDownloaded();// 下載完成
}

class DownloadUtils {
    private static DownloadUtils instance = null;

    private DownloadUtils() {

    }

    public static synchronized DownloadUtils instance() {
        if (instance == null) {
            instance = new DownloadUtils();
        }
        return instance;
    }

    private boolean isDownloading=true;
    private int progress=0;

    public void download(DownloadListener listener)throws InterruptedException{
        while (isDownloading) {
            listener.onDownloading(progress);
            Thread.sleep(1000);
            progress+=10;
            if (progress>=100) {
                isDownloading=false;

            }
        }

        listener.onDownloaded();
    }

}
進度0

進度10

進度20

進度30

進度40

進度50

進度60

進度70

進度80

進度90

完成

阻塞等待

上面程式碼寫法好像差別有點大,再改改,下面這樣看起來就差不多了吧

package demo;

import demo.DownloadUtils.DownloadListener;

public class DownloadUI implements DownloadListener {

    /**
     * @param args
     * @throws InterruptedException
     */
    public static void main(String[] args) throws InterruptedException {
        // TODO Auto-generated method stub
        DownloadUI downloadUI=new DownloadUI();
        DownloadUtils downloadUtils=DownloadUtils.instance();
        downloadUtils.setOnDownloadedListener(downloadUI);
        downloadUtils.download();
    }

    public void onDownloading(int progress) {
        // TODO Auto-generated method stub
        System.out.print("進度" + progress + "\n\r");
    }

    public void onDownloaded() {
        // TODO Auto-generated method stub
        System.out.print("完成" + "\n\r");
    }

}

class DownloadUtils {
    private DownloadListener mDownloadListener;

    interface DownloadListener {
        public void onDownloading(int progress);// 下載中的函式

        public void onDownloaded();// 下載完成
    }

    public void setOnDownloadingListener(DownloadListener mDownloadListener) {
        this.mDownloadListener = mDownloadListener;
    }

    public void setOnDownloadedListener(DownloadListener mDownloadListener) {
        this.mDownloadListener = mDownloadListener;
    }

    private static DownloadUtils instance = null;

    private DownloadUtils() {

    }

    public static synchronized DownloadUtils instance() {
        if (instance == null) {
            instance = new DownloadUtils();
        }
        return instance;
    }

    private boolean isDownloading = true;
    private int progress = 0;

    public void download() throws InterruptedException {
        while (isDownloading) {
            this.mDownloadListener.onDownloading(progress);
            Thread.sleep(1000);
            progress += 10;
            if (progress >= 100) {
                isDownloading = false;

            }
        }
        this.mDownloadListener.onDownloaded();
    }

}

相關推薦

AsyncTask成功執行呼叫方法

package world.hello.tasksuccall; import android.os.AsyncTask; import android.util.Log; import static android.content.ContentValue

關於ajax方法的dataType屬性和成功函式遇到的幾點問題

ajax的dataType屬性是定義Controller中返回值的型別,兩者需要保持一致,如果不一致需要變換型別。  比如  : 前臺js中         $.ajax({             type: "POST",             data : {

ios多執行緒操作(十二)—— 自定義NSOperation實現網路下載

- (void)main { @autoreleasepool { // 下載圖片的耗時操作 NSURL *url = [NSURL URLWithString:self.urlString]; NSData *data = [NSDa

websocket(二)訊息傳送

基於 websocket使用 需求 例:傳送登入請求後及時獲取返回值,然後根據返回值處理接下來的事件,類似http請求,不過需求是要用websocket做到這一點。 思考 我們在websocket 介紹上能夠充分認知到websocket的所有回撥函式都是非同步執行的,也就

關於 C#呼叫c庫,將C#的byte[]傳入C庫的方法和將C庫的char*向上傳入C#的函式byte[] 的方法

需求         使用C#開發,因某種原因,寫了C庫Dll,使用C#抓圖資料傳入C,將C庫收到的圖片資料向上傳入C#回撥函式。   當前現狀         C#中將byte[]轉換成I

JavaScript同步、非同步、執行順序之經典閉包setTimeout面試題分析

初心-楊瑞超個人部落格誠邀您加入qq群(IT-程式猿-技術交流群):757345416 大家注意了,教大家一道口訣: 同步優先、非同步靠邊、回撥墊底(讀起來不順) 用公式表達就是: 同步 => 非同步 => 回撥 有一道經典的面試題: for

Javascript的同步、非同步、執行順序

在做筆試題的時候,遇到一個很經典的題目,關於setTimeout的輸出結果,先來看一道題目: for (var i = 0; i < 5; i++) { setTimeout(function() { console.log(i);

JavaScript同步、非同步、執行順序之經典閉包(setTimeout面試題分析)

同步、非同步回撥?傻傻分不清楚。 大家注意了,教大家一道口訣: 同步優先、非同步靠邊、回撥墊底! 公式表達:同步=>非同步=>回撥 這口訣的用處是什麼呢?至少應付面試,完全夠用! 例1:(經典面試題) for(var i=0; i<5; i++){ set

JavaScript同步、非同步、執行順序分析

       之所以會寫這篇文章,是因為在做筆試題的時候,會遇到一題很經典的題目,關於setTimeout的輸出結果,下面我們先來看一道題目: for (var i = 0; i < 5; i

JNI實現| JNI呼叫JAVA函式|引數和返回值的格式

程式碼下載:http://dl.dbank.com/c0c0xs3b24 一、JNI實現回撥 通過JNI在Native層呼叫Java層的方法,來實現Native層向JAVA層傳遞訊息。 JNICallback.java publicclass JNICallback e

Spring Security認證成功跳(解決前後端分離下OAuth2認證成功跳)

前言 Spring Security(後面簡稱SS)用了很長時間了,但之前一直沒注意到一個有趣的特性,直到最近弄前後端分離,在OAuth2提供者(github)認證後,需要跳回前端頁面(前端頁面和服務端不在同個域下),然後突然一般情況下(同域),SS認證後會自動跳回認證前使

C++函式呼叫Java介面抽象函式

專案中很多程式碼採用C++編寫,配置介面則採用BS結構,使用Java語言進行設定。因此需要實現Java呼叫C++編寫的函式庫(dll檔案或so檔案),採用的技術為JNI(Java Native Interface),對於常用的呼叫方式在《The Java Native In

Android的Animation的onAnimationXXX/onAnimationXXX和Listener.onXXX函式呼叫順序

    在做View的Animation的時候,我們通常需要在動畫的啟動和結束時,加一些控制。Android提供了兩種方式供我們使用    ◆過載View的onAnimationStart和onAnimationEnd     這兩個函式都沒有引數,代表的是當前的Anim

微信支付介面--支付成功--超詳細Demo

寫微信支付成功回撥的程式碼,尤其要注意官方文件的一句話: 這其實不是坑的主要所在,問題是這個文件,我真的不知道該如何吐槽。一次偶然的意外才看到。這個文件說明。 好了,其他的沒有什麼需要特別注意的,直接上程式碼: <?php //獲取介面資料,如果

利用ajaxSubmit()方法實現Form提交表單

1.      背景 最近在工作中,需要實現網頁端圖片上傳到FTP伺服器的功能。上傳檔案是用Form表單提交資料的方法向後臺傳輸檔案流,在此遇到了一個問題:後臺在處理完圖片上傳功能後,需要向前臺回傳是否上傳成功的狀態碼、上傳失敗的錯誤資訊和上傳成功後的圖片URL。但是,用

一個簡單的定時通知執行緒實現

在日常的工作中,遇到如下的業務場景,類似於微信或者支付寶支付後定時通知呼叫方,每隔15/15/30/60...秒都要執行一次通知,於是自己實現瞭如下的程式碼。 通知執行緒是一個定時的執行緒,並且與主業務執行緒分離。 public class AppCallBackTas

JAVA + 非同步請求 + 《AsyncTask》 + 介面

package Utils; import android.os.AsyncTask; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.net.HttpURLConne

實現檔案上傳,以及表單提交成功函式

主要將實現一下兩個功能: 1、使用commons-fileupload實現檔案的上傳(包括圖片);2、使用jquery-form.js實現表單提交成功的回撥函式。 <%@ page language="java" contentType="text/html;

【Unity技巧】統一管理函式——觀察模式

using UnityEngine; using System.Collections; using System.Collections.Generic; public class TimerController : MonoBehaviour { public delegate void OnC

對於兩個非同步任務結束的解決方案

引入ReactiveCocoa,cocoaPods上有ReactiveCocoa這個類。這裡pod的安裝和install就不多說了。注意的是,如果install一直在等待,那就是被牆了,使用pod install --verbose --no-repo-update這條命令