Tag: android asynctask

第二次启动AsyncTask

我正在建立一个Android应用程序,从一个活动开始的时候开始计算时间,第一次我开始活动一切正常,计时器工作正常,它显示在TextView上的时间。 当我完成活动(翻转手机),并尝试再次启动计时器工作正常(我显示为一个日志),但textview不会改变 override fun doInBackground(vararg params: Activity): String? { val acc = Accelerometer(params[0]) dealsList.forEach {Log.d(“fallDeals”, it) } while (true) { sleep(100) publishProgress() Log.i(“TAG”, “${tiltSensorsValues[0] – acc.xPos!!} ${tiltSensorsValues[1] – acc.yPos!!} ${acc.zPos!!}”) if (flippedPhone(acc)) { Log.i(“REFRENCES”, “${dbRefrences.stateRef}”) dbRefrences.stateRef.setValue(“empty”) addToOldDataTableDatabase() return “Triggered” break } } } private fun flippedPhone(acc: Accelerometer) = (tiltSensorsValues[0] – acc.xPos!! 4 || tiltSensorsValues[1] – […]

anko doAsync onComplete

我知道有两种方法可以在Anko库中执行AsyncTask 。 doAsync() doAsyncResult() 我的问题是上面的方法都有onComplete()方法。 在这两个方法的onComplete()中都没有像AsyncTask.onPostExecute()这样的结果跟踪。 例如 : doAsync { sdkServiceFactory.initSDKService() onComplete { Log.d("Controller", "Sdk Connected") } } val result = doAsyncResult { onComplete { Log.d("Controller", "Sdk Connected") } sdkServiceFactory.initSDKService() }.get() 在任何一种方法中,我只能得到完成的回调而不是结果。 Anko库中用于AsyncTask.onPreExecute()和AsyncTask.onPostExecute()的类似方法有哪些。

AsyncTask没有泄漏

这个AsyncTask类应该是静态的,否则可能发生泄漏 为什么我的AsyncTask不起作用? 调用: PlacesTask(this).execute(…) 码: private class PlacesTask internal constructor(activity: MainActivity) : AsyncTask<String, Int, String>() { var data: String? = null private val mRef: WeakReference<MainActivity> = WeakReference(activity) override fun doInBackground(vararg url: String): String? { try { data = MainActivity().downloadUrl(url[0]) } catch (e: Exception) { Log.d("Background Task", e.toString()) } return data } override fun onPostExecute(result: String) […]

Android如何像iOS一样将异步任务组合在一起

我在iOS应用程序中使用dispatch_group来分组多个休息请求的功能: static func fetchCommentsAndTheirReplies(articleId: String, failure: ((NSError)->Void)?, success: (comments: [[String: AnyObject]], replies: [[[String: AnyObject]]], userIds: Set<String>)->Void) { var retComments = [[String: AnyObject]]() var retReplies = [[[String: AnyObject]]]() var retUserIds = Set<String>() let queue = dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0) Alamofire.request(.GET, API.baseUrl + API.article.listCreateComment, parameters: [API.article.articleId: articleId]).responseJSON { response in dispatch_async(queue) { guard let comments = response.result.value as? [[String: […]

如何从单独的AsyncTask修改实例变量

比方说,我有一个活动与实例变量loadedMovie和一个方法,执行另一个文件中的AsyncTask class MainActivity:AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener { var loadedMovie: Movie? = null …. fun loadMovie() { val task = LoadMovieTask(this) task.execute() } } 单独的AsyncTask class LoadMovieTask(val ctx: Activity) : AsyncTask<Void, Void, Void>() { var movie: Movie? = null override fun onPreExecute() { …. } // loading information from network override fun doInBackground(vararg params: Void?): Void? { movie […]

API调用不能在Anko Async中使用

我正在尝试使用Kotlin在Android中发出一个http请求,而且我遇到了两种这样做的方法。 一个是传统的方式,使用AsyncTask (不是很漂亮),我得到了下面的代码(只是doInBackground ,因为其余的类似乎是不必要的): override fun doInBackground(vararg params: Void?): String? { val url = URL("myUrl") val httpClient = url.openConnection() as HttpURLConnection if(httpClient.getResponseCode() == HttpURLConnection.HTTP_OK){ try { val stream = BufferedInputStream(httpClient.getInputStream()) val data: String = readStream(inputStream = stream) return data; } catch (e : Exception) { e.printStackTrace() } finally { httpClient.disconnect() } }else{ println("ERROR ${httpClient.getResponseCode()}") } […]

如何在Android中将许多AsyncTasks转换为Rx Observables?

我正在使用Facebook Graph API来查找喜欢我的帖子的用户。 所有的逻辑实现在几个步骤: 通过向AsyncTask中的API发送请求来查找所有帖子 将此AT转换为Rx.Observable 将观察者GraphResponse映射到列表(Post是POJO) 调用FlatMap运算符,并在其中调用每个帖子并调用asyncTask的body调用方法,然后将其转换为Observable并放入Array中。 在一个可观测数据中合并观测数组。 将其GraphResponse映射到喜欢的配置文件 订阅并呈现“客户列表” 利润! 在步骤#4-5我有一些小问题。 请看存储库中的方法'喜欢'。 在评论中,我写了问题 提示 :我正在使用MVP +清洁架构与存储库(数据层)和Interactor(业务层) class FacebookRepository { private val facebook = Facebook.instance() private val gson = GsonBuilder().create() fun posts(): Observable<GraphResponse>? { return RxDecorator<GraphResponse>().decorate(Observable.defer({ val request = GraphRequest( facebook.token, "/me/posts", null, HttpMethod.GET, GraphRequest.Callback { /* handle the result */ } ) Observable.just(request.executeAndWait()) […]

UserLoginTask完成登录API完成块后,如何返回doInBackground中的结果

我在Android Studio中使用了默认的LoginActivity,并创建了一个简单的登录视图。 在我的应用程序中,身份验证任务和访问令牌生成由服务器通过API调用完成。 但是,由于api调用必须有一个完成块,我在doInBackground登录函数也是这样做的。 因此认证结果存在于完成块的线程中,原来的doInBackground返回结果为onPostExecute不正确。 功能被覆盖,所以我不能改变他们的参数和格式。 在android开发中,我还是一个新手,对于它的异步任务还不是很熟悉,所以我想问一下在doInBackground是否有办法停下来等待完成块的结果? 或者有没有更好的解决方案来解决我的API登录? 谢谢。 这里我UserLoginTask的代码(写在kotlin,但我认为这个概念将与java相同): inner class UserLoginTask internal constructor(private val mUsername: String, private val mPassword) : AsyncTask<Void, Void, Boolean>() { override fun doInBackground(vararg params: Void?): Boolean? { var result = false try { Thread.sleep(2000) } catch(e: InterruptedException) { return false } MyLoginService().login(mUsername, mPassword, onCompleted = { token -> // […]

Android:等待多个任务完成

我有4个异步任务从互联网加载数据。 在同一时间,我用动画展示活动,当任务完成时,我需要启动另一个加载数据的活动。 我在Kotlin上的异步方法(与在java上编写的异步任务相同) private fun getArtistData(name: String) { val getArtistDataAsync = object : AsyncTask<String, Void, Artist>() { override fun doInBackground(vararg args: String?): Artist? { Log.i(TAG, "Получаем данные в AsyncTask для $mArtistName") Caller.getInstance().cache = null return Artist.getInfo(args[0], "26cc2ebf6da38bc646733f661bfc6268"); } override fun onPostExecute(result: Artist?) { super.onPostExecute(result) Log.i(TAG, "Возвращаем данные из AsyncTask для $mArtistName") CommonUtilities.artistInstance = result as […]

Android – Kotlin:异步乐趣中的返回值

我想问一下,如果函数做AsyncTask,是否有可能从函数中“返回”一个值? 例如 : fun readData() : Int{ val num = 1; doAsync { for (item in 1..1000000){ num += 1; } } return num; } 这个函数的问题是AsyncTask还没有完成,所以我从函数中得到一个错误的值,任何想法如何解决它? 是使用一个接口是唯一的原因或有像Swift一样的编译处理程序?