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這條命令