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