2016-11-03 5 views
0

다음 코드를 사용하면 장치를 회전 할 때 오류가 발생합니다.방향 변경 후 NullPointerException

Picasso.with(container.getContext()).load("http://image.tmdb.org/t/p/w185/" + mMovie.getPosterPath()).error(R.drawable.noimagefound).into((ImageView)rootView.findViewById(R.id.image_poster)); 

이는 화면을 회전 할 때만 발생합니다. 만약 내가 브레이크 포인트가 있고 코드를 디버깅, 그럼 제대로 작동합니다. 그것은 그 자체로 움직이는 경우에만 부서지는 것처럼 보입니다.

오류가 아래에 붙여 :

Process: com.example.strahinja.popularmoviesp2, PID: 2942 
       java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.strahinja.popularmoviesp2/com.example.strahinja.popularmoviesp2.activity.MovieListActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.view.ViewGroup.getContext()' on a null object reference 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
        at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4077) 
        at android.app.ActivityThread.-wrap15(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1350) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:5417) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
       Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.view.ViewGroup.getContext()' on a null object reference 
        at com.example.strahinja.popularmoviesp2.fragment.MovieDetailFragment.onCreateView(MovieDetailFragment.java:47) 
        at android.support.v4.app.Fragment.performCreateView(Fragment.java:2080) 
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1108) 
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1290) 
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1272) 
        at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:2149) 
        at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:201) 
        at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:600) 
        at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:178) 
        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1237) 
        at android.app.Activity.performStart(Activity.java:6253) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
        at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4077)  
        at android.app.ActivityThread.-wrap15(ActivityThread.java)  
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1350)  
        at android.os.Handler.dispatchMessage(Handler.java:102)  
        at android.os.Looper.loop(Looper.java:148)  
        at android.app.ActivityThread.main(ActivityThread.java:5417)  
        at java.lang.reflect.Method.invoke(Native Method)  
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  

누군가가 내가이 문제를 해결하기 위해해야 ​​할 일을 말해 주시겠습니까?

답변

2

피카소는 NullPointerException을 던지고 있지 않습니다. 코드는 다음과 같습니다.

특히, 오류는 getContext()을 null 개체로 호출하려고 시도하는 것을 가리 킵니다.

이 경우 가장 많이 발생하는 원인은 container.getContext()이며 container은 null입니다.

container을 설정 한 코드를 제공하지 않았지만 활동/단편을 재생성 할 때 해당 참조를 업데이트하지 않는 것처럼 보입니다.

+0

답장을 보내 주셔서 감사합니다. 내 코드가 잘못되었음을 알고 있습니다. 이 라인은 내 recycleradatper의'onBindView()'메소드에서 호출되고있다. 활동이 시작되면 어댑터가 호출됩니다. 그래서 왜 그런 일이 일어나고 있는지를 놓치고있는 것입니다. –

+0

'container'가 액티비티에서 여러분의 어댑터의 생성자에 전달한 뷰에 대한 참조 인 경우 문제는'container'가 액티비티가 다시 작성되었지만 어댑터가 아니기 때문에 더 이상 존재하지 않습니다. 이것이'onBindView()'에 있다면,보다 안정적인 컨텍스트를 얻는 방법은'holder.itemView.getContext()'를 호출하는 것입니다. –

+0

그걸 수정 한 것 같습니다. 고마워요! –

관련 문제