java - 当我在 Android 上扩展应用程序时,上下文在 Glide 上不起作用

标签 java android android-fragments applicationcontext android-glide

嗨,在我的项目中,我使用 Glide lib 从服务器加载图像,相同的代码工作正常,但是当我将类扩展到全局上下文的应用程序时,我收到错误

我的上下文全局类

public class GlobalAppContextSingleton extends Application {
private static GlobalAppContextSingleton mInstance;
private Context context;

@Override
public void onCreate() {
    super.onCreate();

    GlobalAppContextSingleton.getInstance().initialize(this);
}
public static GlobalAppContextSingleton getInstance() {
    if (mInstance == null) mInstance = getSync();
    return mInstance;
}

private static synchronized GlobalAppContextSingleton getSync() {
    if (mInstance == null) mInstance =
            new GlobalAppContextSingleton();
    return mInstance;
}

public void initialize(Context context) {
    this.context = context;
}

public Context getApplicationContext() {
    return context;
}}

在我的 AndroidManifest 类中

 <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:supportsRtl="true"
    android:name=".GlobalAppContextSingleton"
    android:theme="@style/AppTheme"

    >
    <activity
        android:name=".Activitys.LoginActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    </application>

这是我使用 Glide 库从服务器加载图片的 fragment

 public class ProfileFragment extends Fragment {


    public ProfileFragment() {
        // Required empty public constructor
    }
    TextView profile_txt_firstname,profile_txt_lastname,profile_txt_role;
    ImageView profile_img_profilepic;
    Context context;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment


        View view = inflater.inflate(R.layout.fragment_profile, container, false);
        preferenceData preference= new preferenceData(GlobalAppContextSingleton.getInstance().getApplicationContext());
        profile_txt_firstname=(TextView)view.findViewById(R.id.profile_txt_firstname);
        profile_txt_lastname=(TextView)view.findViewById(R.id.profile_txt_lastname);
        profile_img_profilepic=(ImageView)view.findViewById(R.id.profile_img_profilepic);

        profile_txt_firstname.setText(preference.getString("FirstName"));
        profile_txt_lastname.setText(preference.getString("LastName"));

        String pic =preference.getString("ProfilePicture");
        byte[] decodedString = Base64.decode(pic, Base64.DEFAULT);
        //Glide.with(GlobalAppContextSingleton.getInstance().getApplicationContext())
        Glide.with(context)
                .load(decodedString)
                .asBitmap()
                .placeholder(R.mipmap.ic_launcher)
                .into(profile_img_profilepic);
//        Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
//        profile_img_profilepic.setImageBitmap(decodedByte);


        return view;
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        this.context=context;
    }
}

我遇到的错误是

    FATAL EXCEPTION: main
Process: com.airbustask, PID: 22813
Theme: themes:{}
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
at com.bumptech.glide.load.engine.cache.MemorySizeCalculator.<init>(MemorySizeCalculator.java:35)
at com.bumptech.glide.GlideBuilder.createGlide(GlideBuilder.java:177)
at com.bumptech.glide.Glide.get(Glide.java:155)
at com.bumptech.glide.RequestManager.<init>(RequestManager.java:62)
at com.bumptech.glide.RequestManager.<init>(RequestManager.java:53)
at com.bumptech.glide.manager.RequestManagerRetriever.supportFragmentGet(RequestManagerRetriever.java:198)
at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:104)
at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:87)
at com.bumptech.glide.Glide.with(Glide.java:629)
at com.maintainsmart.Fragments.ProfileFragment.onCreateView(ProfileFragment.java:57)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2074)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1286)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:758)
at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1632)
at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:637)
at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:166)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1237)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1085)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1611)
at android.view.View.measure(View.java:18799)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
at android.view.View.measure(View.java:18799)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
at android.view.View.measure(View.java:18799)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1458)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:746)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:629)
at android.view.View.measure(View.java:18799)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:18799)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1458)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:746)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:629)
at android.view.View.measure(View.java:18799)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2905)
at android.view.View.measure(View.java:18799)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2108)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1224)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1460)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1115)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6023)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:606)
    at android.view.Ch

请帮我解决我在这里做错了什么

最佳答案

在 fragment 中使用getActivity()

 Glide.with(context)
                .load(decodedString)
                .asBitmap()
                .placeholder(R.mipmap.ic_launcher)
                .into(profile_img_profilepic);

更改为

 Glide.with(getActivity())
                .load(decodedString)
                .asBitmap()
                .placeholder(R.mipmap.ic_launcher)
                 .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(profile_img_profilepic);

更新添加.diskCacheStrategy(DiskCacheStrategy.ALL)

  Glide.with(getActivity())
                    .load(decodedString)
                    .asBitmap()
                    .placeholder(R.mipmap.ic_launcher)
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .into(profile_img_profilepic);

关于java - 当我在 Android 上扩展应用程序时,上下文在 Glide 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38866793/

相关文章:

android - 在android中显示两个混合光标

android - 使用 Kotlin 的 fragment 和 Activity

android - 如何通过单击返回(不是硬件后退按钮)返回到上一个 fragment ?

java - 我不知道为什么输出会重复多次,也不知道如何格式化输出。

java - 可以强制 String.valueOf() 在 Java 中返回无符号值吗?

java - Spring Boot 的外部库文件夹

android - 在 android 中调用 finish() 后应用程序没有关闭

java - Oozie 无法通过 Cloudera Manager 创建 MySQL 数据库 : java. lang.ClassNotFoundException : com. mysql.jdbc.Driver

Android:通过滑动而不是通过按钮保存表单数据

android - Glide 不显示图像到CircleImageView Kotlin