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

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

  • 问题内容: 我正在运行一个用Java在Eclipse中编写的程序。对于很大的输入,该程序具有很深的递归级别。对于较小的输入,程序运行正常,但是在给出较大的输入时,出现以下错误: 可以通过增加Java堆栈大小来解决此问题,如果可以,那么如何在Eclipse中做到这一点? 更新: @乔恩·斯基特 该代码递归地遍历解析树以建立数据结构。因此,例如,代码将使用解析树中的一个节点来做一些工作,并在该节点的两