Android 滑动:在碎片附着之前,不能对其进行加载

Android 滑动:在碎片附着之前,不能对其进行加载,android,android-glide,Android,Android Glide,当我打开fragmentA,然后立即转到fragmentB,然后立即返回fragmentA时,出现了这个错误。我想如果我的手机或它的互联网是滞后的,我会犯这个错误,我不知道。这是我的代码: FragmentViewProduct.java E/AndroidRuntime: FATAL EXCEPTION: main Process: com.zihadrizkyef.project_katalog_g

当我打开fragmentA,然后立即转到fragmentB,然后立即返回fragmentA时,出现了这个错误。我想如果我的手机或它的互联网是滞后的,我会犯这个错误,我不知道。这是我的代码:

FragmentViewProduct.java

E/AndroidRuntime: FATAL EXCEPTION: main
                                               Process: com.zihadrizkyef.project_katalog_grosirmukenalukis_user, PID: 15458
                                               java.lang.IllegalArgumentException: You cannot start a load on a fragment before it is attached
                                                   at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:110)
                                                   at com.bumptech.glide.Glide.with(Glide.java:678)
                                                   at com.zihadrizkyef.project_katalog_grosirmukenalukis_user.FragmentViewProduct$1.onResponse(FragmentViewProduct.java:190)
                                                   at com.zihadrizkyef.project_katalog_grosirmukenalukis_user.FragmentViewProduct$1.onResponse(FragmentViewProduct.java:139)
                                                   at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60)
                                                   at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30)
                                                   at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
                                                   at android.os.Handler.handleCallback(Handler.java:739)
                                                   at android.os.Handler.dispatchMessage(Handler.java:95)
                                                   at android.os.Looper.loop(Looper.java:135)
                                                   at android.app.ActivityThread.main(ActivityThread.java:5257)
                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                   at java.lang.reflect.Method.invoke(Method.java:372)
                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:921)
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:716)
@覆盖
恢复时公开作废(){
super.onResume();
downloadSignature=新的StringSignature(String.valueOf(System.currentTimeMillis());
loadProductData();
}
私有void loadProductData(){
StringRequest srLoadData=new StringRequest(Request.Method.POST,MainActivity.SERVER_URL+“/product/readproduct.php”,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
试一试{
JSONObject responseJSON=新的JSONObject(响应);
if(responseJSON.getBoolean(“成功”)){
...
Glide.with(FragmentViewProduct.this)
.load(MainActivity.SERVER_URL+“/product/asset/”+listImageUrl.getString(i))
.占位符(R.可绘制.加载)
.错误(R.drawable.noimage)
.签名(下载签名)
.进入(儿童);
lyImageList.addView(ivImageChild);
}
}否则{
MainActivity.showtoos(responseJSON.getString(“消息”);
}
}捕获(JSONException e){
e、 printStackTrace();
}
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
MainActivity.showtoos(错误,Toast.LENGTH\u LONG);
}
}) {
@凌驾
受保护的映射getParams()引发AuthFailureError{
Map params=新的HashMap();
参数put(“id”,String.valueOf(idToRead));
返回参数;
}
};
添加(srLoadData);
}

您不应在
片段中的
onResume()
上加载数据,而应在activitycreated()上加载数据。由于此方法是在片段完全附加并且其视图已初始化时调用的。感谢您的回复。。但如果我看到片段的生命周期,它表明onResume()比onActivityCreated()处于更低的状态,所以onResume()应该像onActivityCreated()一样工作。。你能给我解释一下吗?我是Android中的新手,如果我暂停应用程序然后继续它,是否会调用onActivityCreated()?
onActivityCreated()
仅在第一次放置片段及其视图时才会调用。并在重新创建片段和活动时再次调用。不应在
fragment
中的
onResume()
上加载数据,而应在片段的activitycreated()方法上加载数据。由于此方法是在片段完全附加并且其视图已初始化时调用的。感谢您的回复。。但如果我看到片段的生命周期,它表明onResume()比onActivityCreated()处于更低的状态,所以onResume()应该像onActivityCreated()一样工作。。你能给我解释一下吗?我是Android中的新手,如果我暂停应用程序然后继续它,是否会调用onActivityCreated()?
onActivityCreated()
仅在第一次放置片段及其视图时才会调用。并且在重新创建片段和活动时再次调用。
@Override
public void onResume() {
    super.onResume();

    downloadSignature = new StringSignature(String.valueOf(System.currentTimeMillis()));
    loadProductData();
}

private void loadProductData() {
    StringRequest srLoadData = new StringRequest(Request.Method.POST, MainActivity.SERVER_URL + "/product/readproduct.php",
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try {
                        JSONObject responseJSON = new JSONObject(response);
                        if (responseJSON.getBoolean("success")) {
                            ...
                            Glide.with(FragmentViewProduct.this)
                                    .load(MainActivity.SERVER_URL+"/product/asset/"+listImageUrl.getString(i))
                                    .placeholder(R.drawable.loading)
                                    .error(R.drawable.noimage)
                                    .signature(downloadSignature)
                                    .into(ivImageChild);
                            lyImageList.addView(ivImageChild);
                            }
                        } else {
                            MainActivity.showToast(responseJSON.getString("message"));
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    MainActivity.showToast(error, Toast.LENGTH_LONG);
                }
            }) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> params = new HashMap<>();
            params.put("id", String.valueOf(idToRead));
            return params;
        }
    };
    volleyRequestQueue.add(srLoadData);
}