콜백의 class.this는 어떻게 null이 될 수 있습니까?

아르투르 헬만

조각이 있습니다. 이 조각에서는 json-rpc에서 http 요청을 실행합니다. 결과를 처리하기 위해 콜백에 이와 같은 것이 있습니다.

FragmentClass.this.getActivity().runOnUiThread(new Runnable() {
    @Override
    public void run() {
        // Do something
    } 
});

문제는 때로는 첫 번째 줄에서 NullPointerException이 발생한다는 것입니다 ... 내 첫 번째 의도는 요청이 실행되는 동안 사용자가 다른 조각을 선택하기 때문에 조각이 빠르게 분리되어

FragmentClass.this.getActivity();

활동이 없으며 null을 반환합니다. 나는 다음과 같은 if로 모든 것을 동봉합니다.

// New if:
if (FragmentClass.this.getActivity() != null) {

    FragmentClass.this.getActivity().runOnUiThread(new Runnable() {
        @Override
        public void run() {
            // Do something
        } 
    });

}

하지만 ... 아무것도 ... 이제 if 문에서 NullPointerException이 발생합니다. 그것은 보인다

FragmentClass.this

null입니다.

어떻게 가능합니다. 코드 부분이 필요하지 않고 gc가 수집 할 때까지 인스턴스가 유지 될 것이라고 생각했습니다.

다음은 logcat이 제공하는 스택 추적입니다. 패키지 이름과 클래스 이름을 변경했습니다. 라인 192는 if 문의 라인입니다.

09-18 10:49:36.915    3860-3860/de.unkown.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NullPointerException
            at de.unkown.app.camera.#FragmentClass$6.onError(FragmentClass.java:192)
            at de.unkown.app.webservice.JsonRpcService$10.onError(JsonRpcService.java:497)
            at    de.unkown.app.webservice.JsonRpcService$DefaultErrorListener.onErrorResponse(JsonRpcService.java:107)
                at com.android.volley.Request.deliverError(Request.java:577)
            at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:101)
            at android.os.Handler.handleCallback(Handler.java:725)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5041)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
            at dalvik.system.NativeStart.main(Native Method)

도와 주셔서 감사합니다!

아르투르

아르투르 헬만

확인,

모든 비동기 블록에서 변경

FragmentClass.this.getActivity()

...에

getActivity()

이 솔기가 도움이됩니다. 왜 그런지 묻지 마세요 ...이게 똑같을 줄 알았는데 ...

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

null이 될 수있는 두 날짜 사이의 테이블을 어떻게 쿼리 할 수 있습니까?

분류에서Dev

이 TextView가 어떻게 Null이 될 수 있습니까?

분류에서Dev

커밋 객체에 2 명의 작성자가있는 것이 어떻게 될 수 있습니까?

분류에서Dev

컴포넌트는 페이지의 제출 버튼이 클릭 될 때 어떻게 알 수 있습니까?

분류에서Dev

무효 함수는 어떻게 반환 값이 될 수 있습니까? C ++

분류에서Dev

파일의 수정 날짜는 어떻게 미래가 될 수 있습니까?

분류에서Dev

이 postgresql 쿼리는 어떻게 테이블로 반환 될 수 있습니까?

분류에서Dev

DBMS의 접합 테이블에서 기본 키는 어떻게 작동합니까? 복합 키가 어떻게 기본 키가 될 수 있습니까?

분류에서Dev

중첩 while 루프는 어떻게 O (n)이 될 수 있습니까?

분류에서Dev

런레벨의 출력이 어떻게 "1 S"가 될 수 있습니까?

분류에서Dev

JavaScript의 콜백 함수는 어떻게 작동합니까?

분류에서Dev

함수가 C ++로 반환 될 때 실행될 콜백을 어떻게 설정할 수 있습니까?

분류에서Dev

내 노트북 팬이 Ubuntu에서 제어 될 수 있는지 어떻게 알 수 있습니까?

분류에서Dev

내 노트북 팬이 Ubuntu에서 제어 될 수 있는지 어떻게 알 수 있습니까?

분류에서Dev

CGPoints는 어떻게 벡터가 될 수 있습니까?

분류에서Dev

img는 어떻게 중앙에 배치 될 수 있습니까?

분류에서Dev

AJAX 호출의 성공 콜백을 통해 페이지의 전체 HTML 또는 본문 콘텐츠를 어떻게 바꿀 수 있습니까?

분류에서Dev

auth.dll이로드 될 수 있는지 어떻게 확인할 수 있습니까?

분류에서Dev

이메일이 어떻게 분실 될 수 있습니까?

분류에서Dev

http.createServer ()는 콜백의 매개 변수를 어떻게 알 수 있습니까?

분류에서Dev

Flutter 위젯의 높이는 어떻게 알 수 있습니까?

분류에서Dev

파일 크기가 어떻게 0이 될 수 있습니까?

분류에서Dev

파일이 어떻게 손상 될 수 있습니까?

분류에서Dev

파이프가 어떻게 붕괴 될 수 있습니까?

분류에서Dev

이 [AnyObject]가 AnyObject로 어떻게 반환 될 수 있습니까?

분류에서Dev

springboot JPA는 어떤 데이터베이스가 사용될 것인지 어떻게 알 수 있습니까?

분류에서Dev

Kotlin Coroutines-루프 내의 지연이 어떻게 그렇게 빠르게 완료 될 수 있습니까?

분류에서Dev

이 json 문자열 업데이트는 Java에서 어떻게 수행 될 수 있습니까?

분류에서Dev

이 Rust / Calloop 콜백 코드의 수명에 어떻게 주석을 달 수 있습니까?

Related 관련 기사

  1. 1

    null이 될 수있는 두 날짜 사이의 테이블을 어떻게 쿼리 할 수 있습니까?

  2. 2

    이 TextView가 어떻게 Null이 될 수 있습니까?

  3. 3

    커밋 객체에 2 명의 작성자가있는 것이 어떻게 될 수 있습니까?

  4. 4

    컴포넌트는 페이지의 제출 버튼이 클릭 될 때 어떻게 알 수 있습니까?

  5. 5

    무효 함수는 어떻게 반환 값이 될 수 있습니까? C ++

  6. 6

    파일의 수정 날짜는 어떻게 미래가 될 수 있습니까?

  7. 7

    이 postgresql 쿼리는 어떻게 테이블로 반환 될 수 있습니까?

  8. 8

    DBMS의 접합 테이블에서 기본 키는 어떻게 작동합니까? 복합 키가 어떻게 기본 키가 될 수 있습니까?

  9. 9

    중첩 while 루프는 어떻게 O (n)이 될 수 있습니까?

  10. 10

    런레벨의 출력이 어떻게 "1 S"가 될 수 있습니까?

  11. 11

    JavaScript의 콜백 함수는 어떻게 작동합니까?

  12. 12

    함수가 C ++로 반환 될 때 실행될 콜백을 어떻게 설정할 수 있습니까?

  13. 13

    내 노트북 팬이 Ubuntu에서 제어 될 수 있는지 어떻게 알 수 있습니까?

  14. 14

    내 노트북 팬이 Ubuntu에서 제어 될 수 있는지 어떻게 알 수 있습니까?

  15. 15

    CGPoints는 어떻게 벡터가 될 수 있습니까?

  16. 16

    img는 어떻게 중앙에 배치 될 수 있습니까?

  17. 17

    AJAX 호출의 성공 콜백을 통해 페이지의 전체 HTML 또는 본문 콘텐츠를 어떻게 바꿀 수 있습니까?

  18. 18

    auth.dll이로드 될 수 있는지 어떻게 확인할 수 있습니까?

  19. 19

    이메일이 어떻게 분실 될 수 있습니까?

  20. 20

    http.createServer ()는 콜백의 매개 변수를 어떻게 알 수 있습니까?

  21. 21

    Flutter 위젯의 높이는 어떻게 알 수 있습니까?

  22. 22

    파일 크기가 어떻게 0이 될 수 있습니까?

  23. 23

    파일이 어떻게 손상 될 수 있습니까?

  24. 24

    파이프가 어떻게 붕괴 될 수 있습니까?

  25. 25

    이 [AnyObject]가 AnyObject로 어떻게 반환 될 수 있습니까?

  26. 26

    springboot JPA는 어떤 데이터베이스가 사용될 것인지 어떻게 알 수 있습니까?

  27. 27

    Kotlin Coroutines-루프 내의 지연이 어떻게 그렇게 빠르게 완료 될 수 있습니까?

  28. 28

    이 json 문자열 업데이트는 Java에서 어떻게 수행 될 수 있습니까?

  29. 29

    이 Rust / Calloop 콜백 코드의 수명에 어떻게 주석을 달 수 있습니까?

뜨겁다태그

보관