2017-01-18 1 views
1

안녕하세요. POST 중에 작은 데이터를 확인하는 동안 StackOverflowError이 표시됩니다. 저장된 데이터와 동일한 지 확인하십시오. 나는 잠시 동안 내 문제를 해결하기위한 해결책을 찾지 않습니다.StackOverFlowError : Stack 크기 1036KB in 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; 
     } 
} 

이 내 AsyncTask를 코드입니다그리고 내 오류 메시지 :

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.

편집 :

내 문제를 해결

, 분명히 내 개체 사용자가 큰에, 그래서 아직 내가 하나의 문자열을 게시하고 참으로 모든 것을 그 괜찮이었다.

+0

여기에 'boolean isCorrect = client.checkLoginData (userData);'라는 예외가 발생하는 이유는 무엇입니까? – Dummy

+0

이유는 무엇입니까? 때문에 내 todos를 읽고 싶습니다 :'ArrayList todoList = client.readAllTodos();'stackoverflowerror가 발생하지 않습니다 – developKinberg

+0

당신의 메소드가 자신을 다시 호출하고, 다시 자신을 호출합니다. 이것은 계속 일어나고 있습니다. 그게 바로 위로입니다. – Dummy

답변

0

여기에서 문제는 궁극적으로 예외로 연결되는 메서드를 호출하는 곳에서 발생합니다. 예외를 제거하기 위해 논리를 변경해야합니다. AsyncTask를 사용하는 경우

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

당신이 그 이상으로 10 초 이내에 실행 할 수있는 작업을 생성해야합니다 결과는 다음과 같습니다

    가있는 경우를 제외하고 AsyncTask를 평생처럼
  1. AsyncTask를로드를 중단 할 것
  2. 죽은
+0

좋아,하지만 내 서버에 작은 객체 만 보내면 Asynctask가 정말 빨리 실행되어야하는지 아닌지 생각해? – developKinberg

+0

인터넷 연결도 파일 전송의 한 요소입니다. – MuTiny