Articles of 异步

使用Volley进行异步帐户身份validation

每一个人。 我正在使用AbstractAccountAuthenticator实现帐户身份validation器,我需要在函数getAuthToken中调用异步方法来validation用户身份。 我的代码是这样的: public class AccountAuthenticator extends AbstractAccountAuthenticator { … @Override public Bundle getAuthToken( final AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options ) throws NetworkErrorException { final AccountManager accountManager = AccountManager.get(context); String authToken = accountManager.peekAuthToken( account, authTokenType ); // !!!! if( TextUtils.isEmpty(authToken) ) { <> return null; } // !!!! final Bundle result = […]

ListView – 滚动时图像随机播放

我有一个带有两个TextView和一个ImageView的ListView。 图像从Internet加载并由LruCache缓存。 滚动浏览ListView时,图像会被洗牌几秒钟。 在正确的图像完全加载之前,不应该是任何图像。 我发现了几个同样问题的问题,但没有人帮助过我:/。 这是我的代码: public class NewsAdapter extends BaseAdapter { private static LayoutInflater inflater; private List items = new LinkedList(); private LruCache mMemoryCache; public NewsAdapter(Context context) { inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); // Bitmap Cache final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024); final int cacheSize = maxMemory / 8; mMemoryCache = new LruCache(cacheSize) […]

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()}”) } […]

为Actionbar SearchView创建异步ContentProvider

我在ActionBar中有一个SearchView,它与ContentProvider连接以提供搜索建议。 这些建议不是来自数据库(与ContentProvider一样),而是来自Web服务。 这就是为什么我必须异步处理ContentProvider的Cursor。 我的代码到目前为止工作,但搜索建议总是一个字母“后面”: 输入”the” ,我得到了之前搜索的所有结果=> “th” 输入”they” ,我得到了之前搜索的所有结果=> “the” 如何告诉SearchView Cursor有新的结果呢? 我查看了ContentObserver和ContentResolver()。notifyChange(),但它们实际上不可能在SearchView的上下文中使用。 到目前为止,这是我的代码。 重要的部分是在ContentProvider的onResponse-callback中。 我创建一个新的MatrixCursor并使用它来覆盖成员MatrixCursor。 AutocompleteSuggestionProvider扩展了ContentProvider @Override public Cursor query(final Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { String query = selectionArgs[0]; mNetworkHelper.startAutoCompleteRequest( selectionArgs[0], SuggestionCategory.EVERYTHING, new Response.Listener() { /** * This is the callback for a successful web service request */ […]

同步startActivityForResult – 等待活动完成

我有一个应用程序,我正在启动一个新的Activity,并需要在继续之前获得活动的结果。 我意识到startActivityForResult是异步/非阻塞的,我可以在onActivityResult回调中获得活动的结果。 所以我想我正在寻找的是等待活动返回的最佳方式……也许这样的事情? 或者,还有更好的方法? 活动启动器function: public String ActivityLauncher() { //Set up Intent startActivityForResult(intent, 1); while (mIsActivityDone == false) { Thread.Sleep(250); } //Continue with processing String data = ” return data; } 回电话: protected void onActivityResult(int requestCode, int resultCode, Intent data) { //Pull out the data mIsActivityDone = true; } 需要将数据返回到更高级别的调用函数 – 这就是我需要等待ActivityLauncher函数中的结果的原因。 谢谢!

Android Async任务重用

我正在开发一个应用程序,其中我需要通过Http检索数据的一些活动。 有了数据后,我在onPostExecute()回调方法中处理它。 如果我将异步任务定义为内联类,这可以正常工作,但是我想在许多活动中执行相同的处理,我将其定义为外部类。 所以问题是,使用外部类如何将“事件”发送回调用类作为传递数据的方法。 我知道如何在C#中执行此操作,但我是Java的新手,无法看到如何实现这一点。

Android Async Http获取请求

我正在尝试实现一个AsClip的httpClient类(否则由于在我的主线程中有连接而得到exception)。 我试过这样的事情: private class execHttpAsync extends AsyncTask { public String resultString; @Override protected HttpResponse doInBackground(String… params) { String url = params[0]; HttpClient httpClient = new DefaultHttpClient(); HttpGet request = new HttpGet(url); request.setHeader(“Content-Type”, “text/xml”); HttpResponse response; try { response = httpClient.execute(request); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) […]

如何在Xamarin Android活动回调中使用await

标题可能有点误导,我的问题更多的是为什么它以这种奇怪的方式工作。 所以我有一个具有TextView和ListView的布局的活动。 我有一个长时间运行的异步方法,准备在列表中显示数据。 所以初始代码是这样的: protected async override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.MyView); await SetupData(); } private async Task SetupData(){ Task.Run(async () => { var data = await new SlowDataLoader().LoadDataAsync(); // For simplicity setting data on the adapter is omitted here }); } 从某种意义上说,它可以正确执行。 但是,活动显示为空白屏幕,即使文本视图仅在一定延迟后呈现。 因此看起来任务实际上并非异步运行。 在“await”调用上设置ConfigureAwait(false)没有帮助。 将SetupData()调用移动到OnPostCreate,OnResume和OnPostResume无效。 唯一使TextView立即出现并在以后呈现列表的事情,当数据到达时是这样的: protected override void OnCreate(Bundle savedInstanceState) { […]

Android:在getView()中执行异步操作的最佳实践

请不要关闭这个,恕我直言它是体面的,可能有用的编程问题。 请我阅读很多东西,我感到困惑,因为我读了不同的意见和不同的方法。 问题如下: 在Adapter的getView()中,我需要执行一些异步操作,比如检查Web上的格式,并基于此更新视图。 我使用了以下方法: 每次调用getView()我都会启动一个Thread 但我的做法为我赢得了很多批评: https://stackoverflow.com/a/28484345/1815311 https://stackoverflow.com/a/28484335/1815311 https://stackoverflow.com/a/28484351/1815311 public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { //… } else { //… } Thread th= new Thread(new Runnable() { @Override public void run() { mActivity.runOnUiThread(new Runnable() { @Override public void run() { CheckSomeInfoOverTheInternet(url, new myCallback { […]

Android:等待firebase valueEventListener

我正在尝试使用Semaphore等待我的firebase valueEventListener。 我有一个用户信息活动,有6个不同的字段,用户必须填写。 当用户保存他/她的信息时,我想进行“全有或全无”types的检查。 某些用户信息无法复制…例如用户名,电子邮件和电话号码。 我正在使用firebase,目前的一般想法是格式: void saveUserInfo(){ if(field1 exist in database){ return; } . . . if(field6 exist in database){ return; } savefield1(); . . . savefield6(); } 我遇到的问题是检查数据库中是否已存在该值的方法。 这是我目前的方法: public boolean alreadyInUse(String key, String value) throws InterruptedException { final StringBuilder done = new StringBuilder(“”); final Semaphore semaphore = new Semaphore(0); mDatabase.child(key).child(value).addListenerForSingleValueEvent(new ValueEventListener() { […]