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

StackOverflowError:AsyncTask中的堆栈大小为1036KB

孟征
2023-03-14

嗨,我得到一个StackOverflowError,同时将一些小数据发送到我的服务器以检查它是否与存储的数据相等。我寻找了一段时间,但没有解决我的问题的办法。

try {
        new AsyncTask<Void, Void, Boolean>() {
            @Override
            protected Boolean doInBackground(Void... voids) {
                return serverRemoteAccessor.checkLoginData(new User("bob@bla.de", "123456"));
            }

            @Override
            protected void onPostExecute(Boolean aBoolean) {
                if (aBoolean){
                    Intent next = new Intent(LoginActivity.this, MainActivity.class);
                    startActivity(next);
                } else {
                    Toast.makeText(LoginActivity.this, 
                   "Ihre Login-Daten sind nicht korrekt, 
                    bitte überprüfen Sie Ihre Eingaben!", 
                    Toast.LENGTH_SHORT).show();
                }
            }
        }.execute();

} catch (Exception e){
        Log.e(LOG_TAG, "Error: " + e);
}
@Override
public boolean checkLoginData(User userData) {
    Log.i(LOG_TAG, "checkLogin");
    boolean isCorrect = client.checkLoginData(userData);

    Log.i(LOG_TAG, "Login is: " + isCorrect);
    return isCorrect;
}
@Override
public boolean checkLoginData(User userData) {
    logger.info("checkLogin");
    User checkLogin = new User("kin@fh-bln.de","123456");
        if (checkLogin.equals(userData)){
            return true;
        }else {
            return false;
        }
}

和我的错误消息:

e.app.malcheme.wunderlist e/AndroidRuntime:致命异常:AsyncTask#1进程:de.app.malcheme.wunderlist,PID:16191 java.lang.runtimeException:在Android.os.AsyncTask$3处执行doInBackground$3时发生错误。done(AsyncTask.java:304)在java.util.concurrent.futuretask.finishCompletion(FutureTask.java:355)在.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)在java.util.concurrent.threadPoolExecutor.runworker(threadPoolExecutor.java:1112)在java.util.concurrent.threadPoolExecutor.worker.run(threadPoolExecutor.java:587)在java.lang.thread.run(threadPoolExecutor.javer.run(threadPoolExecutor.javer.587)在java.lang.thread.run(在libcore.reflect.parameterizedTypeImpl.getResolvedType(ParameterizedTypeImpl.java:75)在libcore.reflect.types.getType(types.java:56)在java.lang.class.getGenericSuperClass(class.java:1195)在org.jboss.resteasy.util.genericType.(genericType.java:34)在org.jboss.resteasy.client.core.baseClientResponse$1.(baseClientResponse:89)在org.jboss.resteasy.client.core.baseClientResponse(ss.resteasy.client.core.baseClientResponse.createresponseFailure(baseclientResponse.java:488)在org.jboss.resteasy.client.core.baseclientResponse.java:479)在org.jboss.resteasy.client.core.baseClientResponse.readFailure(baseclientResponse.java:479)在org.jboss.resteasy.client.core.baseClientResponse.readFrom(se.java:319)位于org.jboss.resteasy.client.core.baseClientResponse.getEntity(BaseClientResponse.java:442)在org.jboss.resteasy.client.core.baseclientResponse.copyfromerror(baseclientResponse.java:94)在org.jboss.resteasy.client.client.client.client.clientResponse.read.(clientResponse.failure(clientResponse.java:32)在org.jboss.resteasy.client.core.baseclientResponse.failure(clientResponse.java.failure(在org.jboss.resteasy.client.core.baseClientResponse.getEntity(BaseClientResponse.java:346)在org.jboss.resteasy.client.core.baseClientResponse.java:319)在org.jboss.resteasy.client.core.baseClientResponse.getEntity(BaseClientResponse.java:442)在org.jboss.resteasy.client.core.baseClientResponse.java:442)在(clientresponsefailure.java:32)位于org.jboss.resteasy.client.core.baseclientresponse.createResponseFailure(baseclientResponse.java:488)在org.jboss.resteasy.client.core.baseclientResponse.java:479)在org.jboss.resteasy.client.core.baseclientResponse.readfrom(baseclientResponse.java:384)在org.jboss.resteasy.client.core.baseclientResponse.java:384),在getEntity(baseclientResponse.java:442)在org.jboss.resteasy.client.core.baseclientResponse.copyFromerror(baseclientResponse.java:94)在org.jboss.resteasy.client.client.client.client.client.clientResponse.fror(baseclientResponse.java:94)在org.jboss.resteasy.client.client.clientResponse.fror(baseclientResponse.java:94)在s.resteasy.client.core.baseClientResponse.ReadFrom(baseClientResponse.java:384)atclient.jboss.resteasy.client。

编辑:

我解决了我的问题,显然我的对象用户很大,所以我发布了单个字符串,是的,一切都很好。

共有1个答案

曹驰
2023-03-14

使用Asynctask时,您应该创建可以在10秒内执行的任务,超过10秒后的后果将是:

  1. AsyncTask将被中断
  2. AsyncTask像生命周期一样加载,除非它正在被杀死
 类似资料:
  • 问题内容: 我想用Java创建一个Stack,但是要固定大小。例如,创建一个新的堆栈,将大小设置为10,然后在将项目推入堆栈时将其填满,并在将其填满到十时将堆栈中的最后一个项目推出(移出)。我想使用Stack,因为它使用LIFO,非常适合我的需求。 但是Stack从Vector继承的setSize()方法似乎并没有真正限制Stack的大小。我想我缺少有关堆栈如何工作的信息,或者堆栈并不是要受到约束

  • 我试过下面的程序。创建此程序的目的是了解有关堆栈大小的更多信息。 执行上述代码后,由于堆栈大小分配过大,程序崩溃。堆栈的最大可能大小是多少?是否为每个程序/计算机固定?可以增加吗? 我想知道是为了知识。如果有人能提供C/C中的例子,那将是非常有帮助的。

  • 问题内容: 我正在使用Ubuntu 11.04。如何找出进程的最大调用堆栈大小以及堆栈中每个帧的大小? 问题答案: 您可以使用查询最大进程和堆栈大小。堆栈框架没有固定的尺寸。它取决于每个帧需要多少本地数据(即本地变量)。 要在命令行上执行此操作,可以使用ulimit。 如果要为正在运行的进程读取这些值,我不知道执行此操作的任何工具,但是查询/ proc文件系统很容易:

  • 问题内容: 由于以下原因,我知道如何设置堆栈大小: 如何在Node.js中增加最大调用堆栈大小 但是,默认大小是多少?(即,我如何获得的PHP等效项) 问题答案: 简单的答案是,默认堆栈大小为492 KB(32位)和984KB(64位)。 如soyuka所评论,请尝试以下操作: 要么

  • 我是Java的初学者,刚开始使用Intellij作为我的IDE。 当我使用它时,有时会延迟。 我更改了我的 xms 和 xmx 以获得更大的堆大小(xms = 1024,xmx = 2048),但它抛出了一个错误。 所以,我把它回滚了。 错误消息是这样的:“初始堆大小设置为大于最大堆大小的值”。 有什么问题? 如果可能,如何增加最大堆大小? 我用的是笔记本电脑,它有8GB内存。x64Intelli

  • 问题内容: 我问了这个问题,以了解如何增加JVM中的运行时调用堆栈大小。我有一个答案,而且我还有很多有用的答案和注释,这些注释和注释与Java如何处理需要大型运行时堆栈的情况有关。我在回答摘要中扩展了我的问题。 最初,我想增加JVM堆栈的大小,以便程序运行时无需安装。 相应的配置设置是具有足够大值的命令行标志。对于TT上面的程序,它可以与OpenJDK的JVM一起工作: 答案之一也指出这些-X…标