当前位置: 首页 > 知识库问答 >
问题:

Android凌空请求未来总是超时

罗源
2023-03-14

我想在应用程序启动时加载一些数据,这些数据将被所有活动使用。我在应用程序的onCreate方法中这样做,因为我希望在显示任何活动之前下载这些数据,所以我尝试使用RequestFuture发出同步请求。但是,始终会抛出TimeoutException。

public void onCreate() {

        super.onCreate();
        
        appRequestQueue = Volley.newRequestQueue(this);

        RequestFuture<JSONArray> requestFuture = RequestFuture.newFuture();
        JsonArrayRequest request = new JsonArrayRequest(
                URL,
                requestFuture,
                requestFuture);

        appRequestQueue.add(request);

        try {
            JSONArray jsonArray = requestFuture.get(90, TimeUnit.SECONDS);
            
            // Do processing. Never gets here            


            Log.v("*******************", "Application initialized");
            
        } catch (JSONException je) {

        } catch (InterruptedException ie) {
        } catch (ExecutionException ee) {
        } catch (TimeoutException te) {
            // Always times out
            Log.v("$$$$$$$$$$$$$$$$$$$$$$$$$", "It has timed out...");

        }

什么是获得应用程序范围的数据的最佳方式,记住没有一个活动是首先启动的?

共有2个答案

包建义
2023-03-14

我最近遇到过这种情况,解决方案是不从主线程(UI)发出请求或处理它们,它总是抛出TimeoutException。考虑创建一个<代码> AycCastase<代码>,并从那里执行这个请求。

您可以使用onPostExecute回调与MainActivity通信。

https://developer.android.com/reference/android/os/AsyncTask.html

衡子安
2023-03-14

是的,根据截击的默认行为,请求的唤醒通知(响应的传递)发布在主UI线程的处理程序上。

因此,当UI线程被阻塞时,唤醒通知将永远不会执行(响应也永远不会传递),并且您将始终获得超时。

 类似资料:
  • 所以我想打印响应的结果,然后使用gson为模型生成数据,但响应永远不会得到返回,因为调用了onResponse。! 如果你注意到Logcat,日志。我的回答没有显示。。!?但是在使用该请求的活动的onSuccess中,它通常会显示日志,但是如果日志包含响应对象,它不会显示哪个非常奇怪,也没有任何意义。。!? Logcat公司 我尝试使用具有相同url和参数的PostMan测试请求,它通常返回jso

  • 在我的一个应用程序中,我使用谷歌提供的凌空截击向服务器发送请求。 问题:onErrorResponse(凌空错误)上的超时和错误对象为空 到目前为止,我已经尝试了: 1) 首先,我得到了空错误对象,因此使用以下代码解决了它: 到目前为止,当我得到错误对象时,会发生。 2)现在应用程序适用于和和,但仅适用于。 请求的凌空日志: 编辑注释: > 服务器端开发的Web服务对于所有三个实例(Android

  • 我使用以下代码将json对象发布到php服务器: 并使用它在php中接收对象: 问题是,$body总是空的,我用FIDDLER检查我的HTTP请求,它作为原始数据存在:{“tag”:“jsonParams”}那么我搞砸了什么?thx提前。

  • 我尝试发送一个删除请求到我的服务器,但我得到一个400坏的请求错误代码。我找了很多,但我找不到任何有帮助解决方案。当我尝试与邮差,请求工作良好。 这是来自Postman的curl命令的外观: 这是我的Java代码: 我还尝试在头中不设置Content-Type,但当我得到一个415错误时,我还删除了getBodyContentType()方法,但这也没有改变。 还有什么能帮上忙的点子吗?

  • 嗯,我是这个论坛的新手,如果你能在这方面帮助我,请。我搜索了一下,但找不到如何在截击请求中添加标题。我有这段代码,我想添加accept编码:gzip和api键。我会感谢你的帮助。代码如下:

  • 我在慢速网络上的Volley POST请求有问题。每次我在我的LogCat中看到BasicNetwork.logSlow请求,我的POST请求都会执行两次或更多次,导致1个请求的多次(2次或更多)发布。我已经将重试策略设置为0,但它没有帮助。 这是我的LogCat 截击(5984):[19807]基本网络。logSlowRequests:请求的HTTP响应= 这是我的密码 请帮助,我拼命寻找解决这