这里有新鲜出炉的精品教程,程序狗速度看过来!
Android 是一种基于 Linux 的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由 Google 公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用 "安卓" 或 "安致"。
这篇文章主要介绍了 Android 使用 volley 过程中遇到的问题解决办法的相关资料, 需要的朋友可以参考下
Android 使用 volley 过程中遇到的问题解决办法
本文主要介绍使用 volley 过程中遇到的问题,错误提示:
com.android.volley.NoConnectionError: java.io.InterruptedIOException",内容加载失败,问题出在重复调用 queue.start() 方法。
错误提示:com.android.volley.NoConnectionError: java.io.InterruptedIOException",然后就内容加载失败。。。、
代码如下:
- private void getWxpayOrderInfo() {
- StringRequest stringRequest = new StringRequest(Request.Method.POST,
- Url, new Response.Listener<String>() {
- @Override
- public void onResponse(String response) {
- }
- }, new Response.ErrorListener() {
- @Override
- public void onErrorResponse(VolleyError error) {
- }
- }) {
- @Override
- protected Map<String, String> getParams()
- throws AuthFailureError {
- // 发送请求用到的一些参数
- Map<String, String> params = new HashMap<String, String>();
- params.put("id", "nameid");
- return params;
- }
- };
- stringRequest.setRetryPolicy(new DefaultRetryPolicy(10000,
- DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
- DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
- queue.add(stringRequest);
- //queue.start(); //经过反复调试错误就出在这里,注释掉这里就可以了
- }
问题出在调用 queue.start() 方法之后,错误原因可以通过 volley 源文件看到,以下是 volley 官方文档中初始化 RequestQueue 的一段代码。
- /**
- * Creates a default instance of the worker pool and calls {@link RequestQueue#start()} on it.
- *
- * @param context A {@link Context} to use for creating the cache dir.
- * @param stack An {@link HttpStack} to use for the network, or null for default.
- * @return A started {@link RequestQueue} instance.
- */
- public static RequestQueue newRequestQueue(Context context, HttpStack stack) {
- File cacheDir = new File(context.getCacheDir(), DEFAULT_CACHE_DIR);
- String userAgent = "volley/0";
- try {
- String packageName = context.getPackageName();
- PackageInfo info = context.getPackageManager().getPackageInfo(packageName, 0);
- userAgent = packageName + "/" + info.versionCode;
- } catch(NameNotFoundException e) {}
- if (stack == null) {
- if (Build.VERSION.SDK_INT >= 9) {
- stack = new HurlStack();
- } else {
- // Prior to Gingerbread, HttpUrlConnection was unreliable.
- // See: http://android-developers.blogspot.com/2011/09/androids-http-clients.html
- stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent));
- }
- }
- Network network = new BasicNetwork(stack);
- RequestQueue queue = new RequestQueue(new DiskBasedCache(cacheDir), network);
- queue.start(); //这里需要注意,原来在请求初始化的时候就已经调用了start方法
- return queue;
- }
- /**
- * Starts the dispatchers in this queue.
- */
- public void start() {
- stop(); // Make sure any currently running dispatchers are stopped.
- // Create the cache dispatcher and start it.
- mCacheDispatcher = new CacheDispatcher(mCacheQueue, mNetworkQueue, mCache, mDelivery);
- mCacheDispatcher.start();
- // Create network dispatchers (and corresponding threads) up to the pool size.
- for (int i = 0; i < mDispatchers.length; i++) {
- NetworkDispatcher networkDispatcher = new NetworkDispatcher(mNetworkQueue, mNetwork, mCache, mDelivery);
- mDispatchers[i] = networkDispatcher;
- networkDispatcher.start();
- }
- }
- /**
- * Stops the cache and network dispatchers.
- */
- public void stop() {
- if (mCacheDispatcher != null) {
- mCacheDispatcher.quit();
- }
- for (int i = 0; i < mDispatchers.length; i++) {
- if (mDispatchers[i] != null) {
- mDispatchers[i].quit();
- }
- }
- }
- /**
- * Forces this dispatcher to quit immediately. If any requests are still in
- * the queue, they are not guaranteed to be processed.
- */
- public void quit() {
- mQuit = true;
- interrupt();
- }
- public void interrupt() {
- // Interrupt this thread before running actions so that other
- // threads that observe the interrupt as a result of an action
- // will see that this thread is in the interrupted state.
- nativeInterrupt();
- synchronized(interruptActions) {
- for (int i = interruptActions.size() - 1; i >= 0; i--) {
- interruptActions.get(i).run();
- }
- }
- }
来源: http://www.phperz.com/article/17/0823/337530.html