使用Picasso在AppCompatActivity中的null引用上使用getApplicationContext

时间:2016-08-30 20:34:37

标签: java android picasso appcompatactivity

我将网址中的图片加载到位图中。下面的代码适用于以前扩展Fragment的类。这一次,我只是复制代码并尝试在扩展AppCompatActivity的类中使用它。唯一的区别是我如何获得背景。

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.this但是没有用。我试过初始化一个Context变量" mContext"在onCreate中,在我将图像加载到位图之前(如上所述),但都没有工作。我已经尝试过this.getApplicationContext(),并且我还试图将mContext作为参数传递给loadBitmap()方法,但是它也没有用。

我的网址字符串是正确的。我不知道如何在尝试之后解决这个问题,看起来像是什么。

最后一条信息,例外:

 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)

1 个答案:

答案 0 :(得分:0)

在对问题的评论中,您说的是loadBitmap()所属的活动,您实际上是自己实例化(在其他一些片段中)并将其用作实用程序类。

您应该永远不会手动创建活动,因为他们由Android 管理,并且他们有生命周期的Android维护。

在您的情况下,活动未处于正确状态(其内部字段之一为空),这就是您获得NPE的原因。

对于实用程序方法,创建实用程序类并从任何地方调用它们。