簡體   English   中英

當我在android上擴展Application時,上下文在Glide上不起作用

[英]Context is not working on Glide when I extends Application on android

嗨,在我的項目中,我正在使用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 lib從服務器加載圖片的片段

 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

請幫我解決我在這里做錯了什么

使用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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM