所以我Google Volley
用于HTTP请求,基本上使用Java
的是HttpURLConnection
.
根据我的测试,问题是:
当达到'读'超时时HttpURLConnection
,在连接关闭之前执行静默重试并抛出相关的异常(SocketTimeoutException
).
请注意:
- 我在使用HTTP POST
请求时注意到此错误.
- 'read'超时与'connect'超时不同.
- 如果未设置'read'超时(通过调用connection.setReadTimeout(int)
设置)(0),或设置为大于该值connection.setConnectTimeout(int)
,则不会发生此错误.
- 这个问题已经在这里讨论了,但是我没有找到任何令人满意的解决方案.
- 这里可以找到一个有点相关的问题,但我不确定它是否相关(是吗?)
更多背景
我的应用程序用于付钱,所以不重试请求是至关重要的(是的,我知道它可以由服务器处理,我希望我的客户端"正确"无论如何).
设置'read'超时时,如果服务器连接已建立,但服务器在应答之前等待/ sleeps/delays-response'超时'时间(从而引发'read'异常,而不是'connect'异常) ,在引发异常之前发送另一个(静默)请求,导致2个类似的请求,这是不可接受的.
我在找什么样的解决方案?
好吧,一个能很好地解决这个问题/错误的问题,就像这里解释的解决方案一样(但我再说一遍,我认为在这种情况下它是无关紧要的).
此外,我希望保持原始流程不变,这意味着不要强制连接关闭或类似的东西.
我现在要做的是,将'read'超时设置为'connection'超时的两倍(它们同时开始计数),以确保首先引发'connection'异常.我还将尝试在服务器端克服此问题.问题是,这个"读取"超时是有原因的,我当前的实现实际上只是忽略它,并且只处理"连接"超时.
编辑
该Volley
图书馆的RetryPolicy
还没有在这个问题上的影响,因为这是一个静默重试.我在图书馆里看起来尽可能深.到处记录/断点,取消了重试的调用.我怎么知道它是99.99%的HttpURLConnection
问题.
我有一个Activity
使用Android NavigationDrawer
.当只使用fragment
s(像往常一样)时,一切都很完美.但现在我想drawer
在我的应用程序的其他活动中使用它,对于其中一些,我不希望主视图是一个fragment
.
问
的问题是,在onTouchEvent()
对的activity
本身(和onItemClickedListener()
一个孩子的ListView
这个问题)不叫,因为drawer
消费它.当然,我希望它被称为:)
不用说,我希望答案很简单(甚至是XML),并希望不是通过扩展Drawer
类(除非那是当然需要的).
更多信息
Activity的主要布局非常简单,基本上是a ListView
和DrawerLayout
它的顶部(在XML下面).
该Drawer
有一个fragment
,因为它是childView
(对片段导航),当然,在ListView
该Drawer
项目.
我已经看到很多关于(不完全)类似问题的问题,而且常见的答案是在抽屉上使用onInterceptTouch()
,requestDisallowInterceptTouchEvent()
在DrawerLayout
父视图(Activity
的主要内容)和甚至onTouchEvent()
(返回False)上ListView
.
似乎没有什么可以做到的.
我读了这个链接
,似乎在某处使用拦截方法可能就是答案.但是怎么样?
如果您需要任何代码,请告诉我.但这是一个非常基本的代码/布局.
谢谢!
我需要在Android中创建收据布局.这个想法很简单,一个带有锯齿形底边的矩形布局.
最好的结果是具有固定锯齿形尺寸(意味着固定的半三角形尺寸)的可绘制/布局,它将实时地根据形状的实际宽度乘以三角形的数量.如果需要,可以使用剪辑三角形.
这是一个很好的例子(编辑:我指的是底部之字形线):
我实际上并不知道如何创建它.想到9补丁,但似乎不合适.想到列表层可绘制水平偏移可能..
也许有可能创建一个带有单独缩放部分的9补丁,以保持之字形的宽高比...这也可以.
编辑 - 答案
使用@Luksprog的评论,我轻松地重新创建了我想要的东西.
这是一些代码:
图像(请注意,高度对应于源图像大小):
<ImageView
android:id="@+id/zigzag_bottom"
android:layout_width="match_parent"
android:layout_height="12dp"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:src="@drawable/zigzag" />
Run Code Online (Sandbox Code Playgroud)
绘制:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ic_zigzag"
android:tileMode="repeat"
android:antialias="true"
/>
Run Code Online (Sandbox Code Playgroud) 一个小问题.
根据Android
文件:
最好,您应该从ComponentCallbacks2实现ComponentCallbacks2.onTrimMemory,以根据各种级别的内存需求逐步卸载资源.该API适用于API级别14及更高版本,因此您只应将此onLowMemory方法用作旧版本的后备版本
所以.还会onLowMemory()
被更高级别的API调用吗?
显然,我只想onTrimMemory()
在关卡时从内部调用它TRIM_MEMORY_COMPLETE
,但我不希望它被调用两次:)
谢谢!