2017-01-18 3 views
1

Привет, я получаю StackOverflowError, а POST - небольшие данные на моем сервере для проверки, если он равен сохраненным данным. Я ищу какое-то время, но нет решения для решения моей проблемы.StackOverFlowError: Размер стека 1036 КБ в AsyncTask

Это мой AsyncTask код:

try { 
     new AsyncTask<Void, Void, Boolean>() { 
      @Override 
      protected Boolean doInBackground(Void... voids) { 
       return serverRemoteAccessor.checkLoginData(new User("[email protected]", "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); 
} 

ServerRemoteAccessor код:

@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("[email protected]","123456"); 
     if (checkLogin.equals(userData)){ 
      return true; 
     }else { 
      return false; 
     } 
} 

И мое сообщение об ошибке:

e.app.malchemie.wunderlist E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1 Process: de.app.malchemie.wunderlist, PID: 16191 java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:304) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) at java.util.concurrent.FutureTask.setException(FutureTask.java:222) at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818) Caused by: java.lang.StackOverflowError: stack size 1036KB at libcore.reflect.ListOfTypes.resolveTypes(ListOfTypes.java:70) at libcore.reflect.ListOfTypes.getResolvedTypes(ListOfTypes.java:55) at libcore.reflect.ParameterizedTypeImpl.getResolvedType(ParameterizedTypeImpl.java:75) at libcore.reflect.Types.getType(Types.java:56) at java.lang.Class.getGenericSuperclass(Class.java:1195) at org.jboss.resteasy.util.GenericType.(GenericType.java:34) at org.jboss.resteasy.client.core.BaseClientResponse$1.(BaseClientResponse.java:89) at org.jboss.resteasy.client.core.BaseClientResponse.copyFromError(BaseClientResponse.java:89) at org.jboss.resteasy.client.ClientResponseFailure.(ClientResponseFailure.java:32) at org.jboss.resteasy.client.core.BaseClientResponse.createResponseFailure(BaseClientResponse.java:488) at org.jboss.resteasy.client.core.BaseClientResponse.createResponseFailure(BaseClientResponse.java:479) at org.jboss.resteasy.client.core.BaseClientResponse.readFrom(BaseClientResponse.java:384) at org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:346) at org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:319) at org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:442) at org.jboss.resteasy.client.core.BaseClientResponse.copyFromError(BaseClientResponse.java:94) at org.jboss.resteasy.client.ClientResponseFailure.(ClientResponseFailure.java:32) at org.jboss.resteasy.client.core.BaseClientResponse.createResponseFailure(BaseClientResponse.java:488) at org.jboss.resteasy.client.core.BaseClientResponse.createResponseFailure(BaseClientResponse.java:479) at org.jboss.resteasy.client.core.BaseClientResponse.readFrom(BaseClientResponse.java:384) at org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:346) at org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:319) at org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:442) at org.jboss.resteasy.client.core.BaseClientResponse.copyFromError(BaseClientResponse.java:94) at org.jboss.resteasy.client.ClientResponseFailure.(ClientResponseFailure.java:32) at org.jboss.resteasy.client.core.BaseClientResponse.createResponseFailure(BaseClientResponse.java:488) at org.jboss.resteasy.client.core.BaseClientResponse.createResponseFailure(BaseClientResponse.java:479) at org.jboss.resteasy.client.core.BaseClientResponse.readFrom(BaseClientResponse.java:384) at org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:346) at org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:319) at org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:442) at org.jboss.resteasy.client.core.BaseClientResponse.copyFromError(BaseClientResponse.java:94) at org.jboss.resteasy.client.ClientResponseFailure.(ClientResponseFailure.java:32) at org.jboss.resteasy.client.core.BaseClientResponse.createResponseFailure(BaseClientResponse.java:488) at org.jboss.resteasy.client.core.BaseClientResponse.createResponseFailure(BaseClientResponse.java:479) at org.jboss.resteasy.client.core.BaseClientResponse.readFrom(BaseClientResponse.java:384) at org.jboss.resteasy.client.

EDIT:

Я решить мою проблему, по-видимому, мой объект Пользователь должен был большой, поэтому пока я отправляю одиночные струны и даже все его хорошо.

+0

Метод вызова цикла здесь 'boolean isCorrect = client.checkLoginData (userData);' вот что вызывает исключение – Dummy

+0

Почему? Потому что, если я хочу читать мои todos, я использую это: 'ArrayList todoList = client.readAllTodos();' Я не получаю никакого stackoverflowerror – developKinberg

+0

Ваш метод вызывает себя, который в свою очередь вызывает себя снова, это продолжает происходить, вот что такое – Dummy

ответ

0

Проблема заключается здесь, когда ваш метод называет себя, что в конечном итоге приводит к исключению, вам нужно изменить свою логику, чтобы исключить исключение.

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; 
} 
+0

Я решаю проблему, и мой метод не вызывает себя. – developKinberg

2

При использовании AsyncTask вы должны создавать задачи, которые могут быть выполнены в течение 10 секунд сверх того, что последствия будут:

  1. AsyncTask будет прервана
  2. AsyncTask нагрузки как на всю жизнь, если это не является убито
+0

Хорошо, но я отправляю только небольшой объект на свой сервер, поэтому я думаю, что Asynctask должен выполняться быстро или нет? – developKinberg

+0

Ваше интернет-соединение также является фактором при отправке файла – MuTiny

Смежные вопросы