2016-08-30 5 views
0

Я загружаю изображение с URL-адреса в растровое изображение. Этот код ниже работал над предыдущими классами, которые расширили фрагмент. На этот раз я просто копирую код и пытаюсь использовать его в классе, который расширяет AppCompatActivity. Единственное различие заключается в том, как я получаю контекст.getApplicationContext на нулевой ссылке в AppCompatActivity с использованием Picasso

public void loadBitmap(String url) { 
    if (loadtarget == null) loadtarget = new Target() { 
     @Override 
     public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
      handleLoadedBitmap(bitmap); 
     } 

     @Override 
     public void onBitmapFailed(Drawable errorDrawable) { 
     } 

     @Override 
     public void onPrepareLoad(Drawable placeHolderDrawable) { 
     } 
    }; 
    mContext = MyActivity.this; 
    Picasso.with(mContext).load(url).into(loadtarget); //giving me null 
} 

В исходном коде, где я использовал его в фрагменте, я был как

Picasso.with(getActivity()).load(url).into(loadtarget); 

Так что теперь, так как этот класс расширяет AppCompatActivity, я думал, что я мог бы использовать «это» или MyActivity . Но это не сработало. Я попытался инициализировать переменную Context «mContext» в onCreate и прямо перед тем, как загрузить изображение в растровое изображение (например, выше), но не работал. Я пробовал this.getApplicationContext(), и я также попытался передать mContext в качестве параметра в методе loadBitmap(), но это тоже не сработало.

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

Последняя часть информации, исключение:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference 
                   at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:112) 
                   at com.salty.seas.Driver.MyActivity.loadBitmap(MyActivity.java:144) 
                   at com.salty.seas.Driver.MyActivity$1.onKeyEntered(MyActivity.java:61) 
                   at com.firebase.geofire.GeoQuery$2.run(GeoQuery.java:126) 
                   at android.os.Handler.handleCallback(Handler.java:739) 
                   at android.os.Handler.dispatchMessage(Handler.java:95) 
                   at android.os.Looper.loop(Looper.java:158) 
                   at android.app.ActivityThread.main(ActivityThread.java:7224) 
                   at java.lang.reflect.Method.invoke(Native Method) 
                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
+0

Является ли loadBitmap внутри вашей MyActivity? –

+0

Yup! @ArtemNovikov – SaltySea

+0

Обеспечьте полную стек. –

ответ

0

В комментариях к вопросу вы сказали, что активность, loadBitmap() принадлежит, вы на самом деле инстанцируете себя (в каком-то другом фрагменте) и использовать его в качестве класс полезности.

Вы должны никогда создавать Активности вручную как они под управлением андроида и они имеют жизненный цикл андроид поддерживает.

В вашем случае активность не в правильном состоянии (одно из ее внутренних полей равно null), поэтому вы получаете NPE.

Для методов утилиты создайте классы полезности и вызовите их из любого места, где хотите.