2
respostas

Erro ao pegar imagem: 'int android.graphics.Bitmap.getWidth()' on a null object reference

Olá, após fazer a sincronização com o servidor minha aplicação dá erre erro:

E/UncaughtException: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference
                         at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:702)
                         at br.com.example.admin.agenda.adapter.AlunosAdapter.getView(AlunosAdapter.java:78)
                         at android.widget.AbsListView.obtainView(AbsListView.java:2372)
                         at android.widget.ListView.makeAndAddView(ListView.java:2052)
                         at android.widget.ListView.fillDown(ListView.java:786)
                         at android.widget.ListView.fillFromTop(ListView.java:847)
                         at android.widget.ListView.layoutChildren(ListView.java:1826)
                         at android.widget.AbsListView.onLayout(AbsListView.java:2171)
                         at android.view.View.layout(View.java:19590)
                         at android.view.ViewGroup.layout(ViewGroup.java:6053)
                         at android.support.v4.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:610)
                         at android.view.View.layout(View.java:19590)
                         at android.view.ViewGroup.layout(ViewGroup.java:6053)
                         at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1080)
                         at android.view.View.layout(View.java:19590)
                         at android.view.ViewGroup.layout(ViewGroup.java:6053)
                         at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                         at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                         at android.view.View.layout(View.java:19590)
                         at android.view.ViewGroup.layout(ViewGroup.java:6053)
                         at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:443)
                         at android.view.View.layout(View.java:19590)
                         at android.view.ViewGroup.layout(ViewGroup.java:6053)
                         at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                         at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                         at android.view.View.layout(View.java:19590)
                         at android.view.ViewGroup.layout(ViewGroup.java:6053)
                         at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
                         at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
                         at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
                         at android.view.View.layout(View.java:19590)
                         at android.view.ViewGroup.layout(ViewGroup.java:6053)
                         at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                         at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                         at com.android.internal.policy.DecorView.onLayout(DecorView.java:758)
                         at android.view.View.layout(View.java:19590)
                         at android.view.ViewGroup.layout(ViewGroup.java:6053)
                         at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2484)
                         at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2200)
                         at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1386)
                         at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6733)
                         at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
                         at android.view.Choreographer.doCallbacks(Choreographer.java:723)
                         at android.view.Choreographer.doFrame(Choreographer.java:658)
                         at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
                         at android.os.Handler.handleCallback(Handler.java:789)
                         at android.os.Handler.dispatchMessage(Handler.java:98)
                         at android.os.Looper.loop(Looper.java:164)
                         at android.app.ActivityThread.main(ActivityThread.java:6541)
                         at java.lang.reflect.Method.invoke(Native Method)
                         at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
2 respostas

Após deixar comentado esse código o erro não persiste:

if (caminhoFoto!=null) {
            Bitmap bitmap = BitmapFactory.decodeFile(caminhoFoto);
            Bitmap bitmapReduzido = Bitmap.createScaledBitmap(bitmap, 100, 100, true);
            campoFoto.setImageBitmap(bitmapReduzido);
            campoFoto.setScaleType(ImageView.ScaleType.FIT_XY);
        }

Isso só acontece quando um aluno possui uma foto, ou seja caminhoFoto!=null, e o app pega o caminho desta foto no servidor. O professor não teve um aluno com foto nos testes de sua aplicação, deve ser por isso que não apareceu esse erro na aula. Abaixo segue o aluno recebido do servidor, alguns possuem o caminho foto, por isso o erro.. O que posso fazer?

D/OkHttp: {"alunos":[{"id":"247c8912-0630-46b3-ac68-188ffad37bd9","nome":"teste2","endereco":"endteste2","telefone":"321432432","site":"www.teste2.com","nota":10.0,"desativado":0,"idCliente":0},{"id":"37e27977-ae5e-47e6-afbb-8ec61fda7c54","nome":"teste1","endereco":"endteste1","telefone":"213123","site":"www.teste1.com","nota":10.0,"caminhoFoto":"/storage/emulated/0/Android/data/br.com.example.admin.agenda/files/1534540477956foto.jpg","desativado":0,"idCliente":0},{"id":"44b50280-e5a6-4257-9af2-abad1567fda7","nome":"teste3","endereco":"endteste3","telefone":"141232","site":"www.teste3.com","nota":10.0,"desativado":0,"idCliente":0}],"momentoDaUltimaModificacao":"2018-08-17T18:16:52.666"}

Fala ai Lucas, de boa ?

Entendi seu problema agora.

Cara nesse caso, a gente geralmente não faz isso, a coisa mais comum que fazemos é enviar a imagem para um servidor dedicado de imagens, tipo um s3 ninja da amazon, e salvamos a url da imagem para acesso, que assim, independente de ter foto ou não, funcionaria, pois você teria que fazer uma requisição para buscar a imagem, usando libs tipo glide ou picasso.