Android 应用程序在 post of firebase post 数据到服务器时崩溃
Android App crash on post of firebase post of data to server
我的 Android 应用程序在 firebase 服务器上的第二个 post 上崩溃。在 logcat 中显示如下:
08-14 20:01:55.775 2038-2047/com.spiralaxis.citiconnect E/StrictMode﹕ A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
java.lang.Throwable: Explicit termination method 'close' not called
at dalvik.system.CloseGuard.open(CloseGuard.java:184)
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:287)
at com.android.org.conscrypt.OpenSSLSocketImpl.waitForHandshake(OpenSSLSocketImpl.java:623)
at com.android.org.conscrypt.OpenSSLSocketImpl.getSession(OpenSSLSocketImpl.java:787)
at com.firebase.tubesock.WebSocket.verifyHost(WebSocket.java:333)
at com.firebase.tubesock.WebSocket.createSocket(WebSocket.java:319)
at com.firebase.tubesock.WebSocket.run(WebSocket.java:117)
因为 Android 在资源非常受限的设备上运行,所以确保不浪费资源尤为重要。 Java 非常擅长确保资源在不需要时立即释放,并且对于许多事情它会自动执行此操作,但有些事情无法可靠地完成。
在 logcat 中发现的是您正在获取某种资源,但从未释放它。它看起来好像是您正在抓取的网络套接字。您是否打开了网络连接但在完成后没有再次关闭它?
这里是 Firebase 开发人员。我们将对此进行研究,并尝试在未来的 Firebase 版本中修复它。现在,我想你需要禁用 StrictMode.
完全同意。
并从他自己添加:
每种本地包装语言中的每种资源(也在 Java 中)您需要关闭不需要更多使用的已打开资源。
在 Android 开发中,在这种情况下您需要检查关闭资源:
- 位图
- 流
- 光标
- 等等
错误
A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
意味着(可能在您的情况下)您在使用后没有关闭读取数据的流。
您需要获取响应流,完整读取并关闭它(即使响应代码不正确)-我的意思是 catch-finaly 块。
(此处为 firebase 开发人员)
我们有一个修复程序,将出现在我们 Android Firebase 客户端的下一版本中。在此之前,如果您使用严格模式,请使用 penaltylog 而不是 penaltydeath 并忽略错误。
我的 Android 应用程序在 firebase 服务器上的第二个 post 上崩溃。在 logcat 中显示如下:
08-14 20:01:55.775 2038-2047/com.spiralaxis.citiconnect E/StrictMode﹕ A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
java.lang.Throwable: Explicit termination method 'close' not called
at dalvik.system.CloseGuard.open(CloseGuard.java:184)
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:287)
at com.android.org.conscrypt.OpenSSLSocketImpl.waitForHandshake(OpenSSLSocketImpl.java:623)
at com.android.org.conscrypt.OpenSSLSocketImpl.getSession(OpenSSLSocketImpl.java:787)
at com.firebase.tubesock.WebSocket.verifyHost(WebSocket.java:333)
at com.firebase.tubesock.WebSocket.createSocket(WebSocket.java:319)
at com.firebase.tubesock.WebSocket.run(WebSocket.java:117)
因为 Android 在资源非常受限的设备上运行,所以确保不浪费资源尤为重要。 Java 非常擅长确保资源在不需要时立即释放,并且对于许多事情它会自动执行此操作,但有些事情无法可靠地完成。
在 logcat 中发现的是您正在获取某种资源,但从未释放它。它看起来好像是您正在抓取的网络套接字。您是否打开了网络连接但在完成后没有再次关闭它?
这里是 Firebase 开发人员。我们将对此进行研究,并尝试在未来的 Firebase 版本中修复它。现在,我想你需要禁用 StrictMode.
完全同意
并从他自己添加: 每种本地包装语言中的每种资源(也在 Java 中)您需要关闭不需要更多使用的已打开资源。
在 Android 开发中,在这种情况下您需要检查关闭资源:
- 位图
- 流
- 光标
- 等等
错误
A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
意味着(可能在您的情况下)您在使用后没有关闭读取数据的流。
您需要获取响应流,完整读取并关闭它(即使响应代码不正确)-我的意思是 catch-finaly 块。
(此处为 firebase 开发人员) 我们有一个修复程序,将出现在我们 Android Firebase 客户端的下一版本中。在此之前,如果您使用严格模式,请使用 penaltylog 而不是 penaltydeath 并忽略错误。