应用程序正在使用Volley库来发出简单的GET请求,我将APK发送给具有不同设备的人,同意测试应用程序。 14人中有10人有很好的经验,并对提出请求的速度感到满意。但其他4人无法收到请求,收到错误:
public void onErrorResponse(VolleyError error) {
Toast.makeText(getActivity(), "No internet connection",
Toast.LENGTH_LONG).show();
}
由于物理距离的原因,我没有兴趣深入了解他们设备上的实际调试情况。 这就是为什么我将此问题发布给与库或这些设备模型有类似问题的任何人: 阿尔卡特一触式alpha 6032;夸脱P5000; ALCATEL ONE TOUCH 5036D; 我的AppController:
public class AppController extends Application {
public static final String TAG = AppController.class.getSimpleName();
private RequestQueue mRequestQueue;
private static AppController mInstance;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
}
public static synchronized AppController getInstance() {
return mInstance;
}
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(getApplicationContext());
}
return mRequestQueue;
}
public <T> void addToRequestQueue(Request<T> req, String tag) {
// set the default tag if tag is empty
req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
getRequestQueue().add(req);
}
public <T> void addToRequestQueue(Request<T> req) {
req.setTag(TAG);
getRequestQueue().add(req);
}
public void cancelPendingRequests(Object tag) {
if (mRequestQueue != null) {
mRequestQueue.cancelAll(tag);
}
}
}
我的片段类:
public class RepertoireTab extends ListFragment {
private static final String URL = "http://example.com/?json=get_category_posts&slug=Repertoire&status=publish";
ListView listView;
MovieAdapter adapter;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
adapter = new MovieAdapter(getActivity(), R.layout.listview_item);
StringRequest movieReq = new StringRequest(URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Wrap wrap = new Gson().fromJson(response, Wrap.class);
for (Post post : wrap.getPosts()) {
adapter.add(post);
}
adapter.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getActivity(), "No internet connection",
Toast.LENGTH_LONG).show();
}
});
AppController.getInstance().addToRequestQueue(movieReq);
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.repertoire_tab, container, false);
getActivity().getWindow().setBackgroundDrawable(null);
listView = (ListView) view.findViewById(android.R.id.list);
listView.setAdapter(adapter);
return view;
}
}
我甚至尝试在另一个应用程序的Activity中调用异步任务(volley代码),将apk文件发送给出错的设备,但问题仍然存在。 再次,在其他设备上正常工作。
答案 0 :(得分:0)
这里的一个问题是你在onCreateView()方法中初始化ProgressBar,但是你在onCreateView()之前的onAttach方法中调用它。解决方案是在onActivityCreated()方法中移动您的异步任务(齐射代码)。这是片段生命周期:
如果您希望每次输入此片段时执行您的截击任务,请将其放在onResume()方法中。