java - App 从解析初始化恢复返回后,在主线程上获取网络异常

标签 java android parse-platform

所以我在我的 Android 应用程序中使用解析框架,除了一件小事情之外,一切都运行良好。当我将应用程序插入后台并在一段时间后恢复它时。我正在得到

Caused by: android.os.NetworkOnMainThreadException
        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
        at com.android.org.conscrypt.OpenSSLSocketImpl.close(OpenSSLSocketImpl.java:1009)
        at org.apache.http.impl.SocketHttpClientConnection.close(SocketHttpClientConnection.java:205)
        at org.apache.http.impl.conn.DefaultClientConnection.close(DefaultClientConnection.java:161)
        at org.apache.http.impl.conn.tsccm.AbstractConnPool.closeConnection(AbstractConnPool.java:320)
        at org.apache.http.impl.conn.tsccm.AbstractConnPool.shutdown(AbstractConnPool.java:296)
        at org.apache.http.impl.conn.tsccm.ConnPoolByRoute.shutdown(ConnPoolByRoute.java:670)
        at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager.shutdown(ThreadSafeClientConnManager.java:256)
        at com.parse.ParseRequest.initialize(ParseRequest.java:104)
        at com.parse.Parse.initialize(Parse.java:108)

我不知道如何防止这种情况,并且只有当应用程序在后台运行很长时间后返回时才会发生这种情况。

我从某处听说,这种行为只发生在 KitKat 上,但这绝不是一种保证。我已经考虑过在单独的线程中执行初始化,但我无法让它工作(我对此很陌生)

我通过在我的 Activity 中执行此代码来初始化解析:

 @Override
  public void onCreate()
  {
    super.onCreate();

    Parse.initialize(this, "xxxx", "xxxxx"); 
  }

我希望使用解析框架的人能够解决这个问题。

最佳答案

您不应该从 Activity 中的新线程调用此方法。事实上,official Parse documentation建议您根本不要从 Activity 中调用此方法。相反,您应该从 Application.onCreate() 方法调用 parse.initialize,而不是 Activity.onCreate() 方法。我不认为从 Activity.onCreate() 调用它有什么大不了的,但显然确实如此,尤其是在 KitKat 中。不过,这实现起来相当简单。创建一个扩展 android.app.Application 的新 java 类文件。该文件的名称应与您的项目完全相同(区分大小写)。像这样的东西:

package com.your_package.your_project_name;

import com.parse.Parse;

import android.app.Application;

public class your_project_name extends Application {
    @Override
    public void onCreate(){
        super.onCreate();
        Parse.initialize(this, "your application id", "your client key");
        //if you need to, initialize ParseFacebookUtils, etc. here
    }
}

关于java - App 从解析初始化恢复返回后,在主线程上获取网络异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23358486/

相关文章:

java - 如何将显示为星号的参数传递给 Java 应用程序的主要功能

java - 不兼容的类型 - 找到了 java.util.Iterator(Lot) 但预期是 java.util.Iterator (java.lang.String)

java - 解析日期时出现意外异常

android - 在安卓中寻找附近的酒店

java - 如何在android中合并两个音频文件

ios - 为什么我会收到指针错误?

ios - 在 Swift 中子类化 PFObject

java - 如何从 Java 中的字符串中删除空字符 (\0)

android - 选取框文本在小部件中不起作用

javascript - 用户 getSessionToken() 返回未定义