@Test public void testCacheEntryNull() throws VolleyError { when(cache.get(anyString())).thenReturn(null); dispatcher.processRequest(request); verify(mockNetwork).performRequest(request); }
// Lyrics response in this method can be handled in a better way.If the response was jsonarray or // jsonobject, // it can be parsed quickly. private void getLyricDetails() { // We first check for cached request Cache cache = MusicSearchController.getInstance().getRequestQueue().getCache(); Entry entry = cache.get(lyricsURL); if (entry != null) { // fetch the data from cache try { String data = new String(entry.data, "UTF-8"); // Display the first 500 characters of the response string. lyricsDetail.setText("Response is: " + data); // hideProgressDialog(); setProgressBarIndeterminateVisibility(false); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } else { // making fresh volley request and getting json // Request a string response from the provided URL. StringRequest stringRequest = new StringRequest( Request.Method.GET, lyricsURL, new Response.Listener<String>() { @Override public void onResponse(String response) { // Display the first 500 characters of the response // string. Log.d(TAG, response); lyricsDetail.setText("Response is: " + response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { lyricsDetail.setText("Could not get lyrics details"); } }); // Adding request to volley request queue MusicSearchController.getInstance().addToRequestQueue(stringRequest); } }
public void getData() { Cache cache = AppController.getInstance().getRequestQueue().getCache(); Cache.Entry entry = cache.get(URL_FEED); if (entry != null) { // fetch the data from cache try { String data = new String(entry.data, "UTF-8"); try { parseJsonFeed(new JSONObject(data)); } catch (JSONException e) { e.printStackTrace(); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } else { // making fresh volley request and getting json JsonObjectRequest jsonReq = new JsonObjectRequest( Request.Method.GET, URL_FEED, "", new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { VolleyLog.d(TAG, "Response: " + response.toString()); if (response != null) { parseJsonFeed(response); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { VolleyLog.d(TAG, "Error: " + error.getMessage()); } }); // Adding request to volley request queue AppController.getInstance().addToRequestQueue(jsonReq); } }
private void handleResult(User user) { if (mListener != null) { if (error != null) { mListener.onError(error.getMessage()); return; } // Check if user image bitmap in cache Cache cache = AppController.getInstance().getRequestQueue().getCache(); Cache.Entry entry = cache.get(user.getPhoto()); if (entry != null) { // Decode byte array (entry.data) to bitmap user.setBitmapPhoto(LocationAppUtils.decodeByteToBitmap(entry.data)); } mListener.onUserInfoFetched(user); } }
@Before public void setUp() throws Exception { initMocks(this); dispatcher = new SyncDispatcher(cache, mockNetwork); Response response = Response.success(null, cacheEntry); when(cache.get(anyString())).thenReturn(cacheEntry); when(request.parseNetworkResponse(any(NetworkResponse.class))).thenReturn(response); when(request.getCacheKey()).thenReturn("test-cache-key"); }
public static <T> T getCacheFile(InputBase input, Class<T> clazz) { Cache cache = requestQueue.getCache(); Request<T> request = new GsonRequest<T>(input.method(), input.toString(), "", clazz, null, null, null, null); Cache.Entry entry = cache.get(request.getCacheKey()); if (entry != null) { try { String json = new String(entry.data, "UTF-8"); if (clazz == String.class) { return (T) json; } // File类型写文件后返回file对象 else if (clazz == File.class) { String fileName = TextUtil.md5(input.toString()); File outFile = new File(DirectoryManager.getDirectory(DirectoryManager.DIR.DATA), fileName); FileUtils.writeFile(outFile.getAbsolutePath(), entry.data); return (T) outFile; } // 替换服务端可能返回的错误的data格式 json = json.replace("\"data\":[]", "\"data\":{}"); // 服务器返回errNo=0 if (json.matches(ERROR_NO_0_EXPRESSION)) { T data; JSONObject jsonObject = new JSONObject(json); json = jsonObject.getString("data"); // 其他属于Gson请求,解析对象返回 Gson gson = GsonUtil.createBuilder(); data = (T) gson.fromJson(json, clazz); return data; } // 服务器返回errNo != 0 else { return null; } } catch (Exception e) { return null; } } return null; }
@Override public void run() { if (DEBUG) { VolleyLog.v("start new dispatcher"); } Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); // Make a blocking call to initialize the cache. mCache.initialize(); while (true) { try { // Get a request from the cache triage queue, blocking until at least one is available. final Request<?> request = mCacheQueue.take(); request.addMarker("cache-queue-take"); // If the request has been canceled, don't bother dispatching it. if (request.isCanceled()) { request.finish("cache-discard-canceled"); continue; } // Attempt to retrieve this item from cache. Cache.Entry entry = mCache.get(request.getCacheKey()); if (entry == null) { request.addMarker("cache-miss"); // Cache miss; send off to the network dispatcher. mNetworkQueue.put(request); continue; } // If it is completely expired, just send it to the network. if (entry.isExpired()) { request.addMarker("cache-hit-expired"); request.setCacheEntry(entry); mNetworkQueue.put(request); continue; } // We have a cache hit; parse its data for delivery back to the request. request.addMarker("cache-hit"); Response<?> response = request.parseNetworkResponse( new NetworkResponse(entry.data, entry.responseHeaders)); // TODO request.addMarker("cache-hit-parsed"); if (!entry.refreshNeeded()) { // Completely unexpired cache hit. Just deliver the response. mDelivery.postResponse(request, response); } else { // Soft-expired cache hit. We can deliver the cached response, // but we need to also send the request to the network for // refreshing. request.addMarker("cache-hit-refresh-needed"); request.setCacheEntry(entry); // Mark the response as intermediate. response.intermediate = true; // Post the intermediate response back to the user and have // the delivery then forward the request along to the network. mDelivery.postResponse( request, response, new Runnable() { @Override public void run() { try { mNetworkQueue.put(request); } catch (InterruptedException e) { // Not much we can do about this. } } }); } } catch (InterruptedException e) { // We may have been interrupted because it was time to quit. if (mQuit) { return; } continue; } } }
@SuppressLint("NewApi") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.propertyListView); paButton = (Button) findViewById(R.id.paButton); pdButton = (Button) findViewById(R.id.pdButton); baButton = (Button) findViewById(R.id.baButton); bdButton = (Button) findViewById(R.id.bdButton); feedItems = new ArrayList<Property>(); listAdapter = new PropertyListAdapter(this, feedItems); listView.setAdapter(listAdapter); // Attach the listener to the AdapterView onCreate listView.setOnScrollListener( new EndlessScrollListener() { @Override public void onLoadMore(int page, int totalItemsCount) { findProperties(feedOrder, page); } }); // We first check for cached request Cache cache = AppController.getInstance().getRequestQueue().getCache(); Cache.Entry entry = cache.get(URL_FEED); if (entry != null) { // fetch the data from cache try { String data = new String(entry.data, "UTF-8"); try { parseJsonFeed(new JSONObject(data)); } catch (JSONException e) { e.printStackTrace(); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } else { // First time you run the app there is no order and values are coming in default order. findProperties(feedOrder, pageCount); } paButton.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { pageCount = 0; feedOrder = "pa"; listView.setSelection(0); findProperties(feedOrder, pageCount); } }); pdButton.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { pageCount = 0; feedOrder = "pd"; listView.setSelection(0); findProperties(feedOrder, pageCount); } }); baButton.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { pageCount = 0; feedOrder = "ba"; listView.setSelection(0); findProperties(feedOrder, pageCount); } }); bdButton.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { pageCount = 0; feedOrder = "bd"; listView.setSelection(0); findProperties(feedOrder, pageCount); } }); }
private void _webServiceGetServices() { _urlWebService = "http://52.72.85.214/ws/ObtenerServicios"; progressBar.setVisibility(View.VISIBLE); // buttonSeleccionarServicios.setVisibility(View.GONE); Cache.Entry entry = cache.get(_urlWebService); if (entry != null) { try { String data = new String(entry.data, "UTF-8"); Log.e("Cache", "" + data); // handle data, like converting it to xml, json, bitmap etc., } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } else { Log.e("Cache", "empty"); // Cached response doesn't exists. Make network call here } JsonObjectRequest jsonObjReq = new JsonObjectRequest( Request.Method.GET, _urlWebService, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { try { String message = response.getString("message"); Log.w("Mensaje : ", message); JSONArray servicios = response.getJSONArray("result"); JSONObject object; for (int i = 0; i <= servicios.length() - 1; i++) { object = servicios.getJSONObject(i); Servicio servicio = new Servicio(); servicio.setImagen(object.getString("imagenServicio")); servicio.setId(object.getString("codigoServicio")); servicio.setNombreServicio(object.getString("nombreServicio")); servicio.setDescripcionServicio(object.getString("descripcionServicio")); servicio.setValorServicio(object.getString("valorServicio")); servicioList.add(servicio); } progressBar.setVisibility(View.GONE); linearLayoutPrecioTotal.setVisibility(View.VISIBLE); // // buttonSeleccionarServicios.setVisibility(View.VISIBLE); mAdapter.notifyDataSetChanged(); } catch (JSONException e) { progressBar.setVisibility(View.GONE); // buttonSeleccionarServicios.setVisibility(View.GONE); AlertDialog.Builder builder = new AlertDialog.Builder(SolicitarServicio.this.getActivity()); builder .setMessage(e.getMessage().toString()) .setPositiveButton( "Aceptar", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { // Intent intent = new Intent(Pago.this.getApplicationContext(), // Registro.class); // startActivity(intent); // finish(); } }) .show(); e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { if (error instanceof TimeoutError) { AlertDialog.Builder builder = new AlertDialog.Builder(SolicitarServicio.this.getActivity()); builder .setMessage("Error de conexión, sin respuesta del servidor.") .setPositiveButton( "Aceptar", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { // Intent intent = new Intent(Pago.this.getApplicationContext(), // Registro.class); // startActivity(intent); // finish(); } }) .show(); } else if (error instanceof NoConnectionError) { AlertDialog.Builder builder = new AlertDialog.Builder(SolicitarServicio.this.getActivity()); builder .setMessage("Por favor, conectese a la red.") .setPositiveButton( "Aceptar", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { // Intent intent = new Intent(Pago.this.getApplicationContext(), // Registro.class); // startActivity(intent); // finish(); } }) .show(); } else if (error instanceof AuthFailureError) { AlertDialog.Builder builder = new AlertDialog.Builder(SolicitarServicio.this.getActivity()); builder .setMessage( "Error de autentificación en la red, favor contacte a su proveedor de servicios.") .setPositiveButton( "Aceptar", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { // Intent intent = new Intent(Pago.this.getApplicationContext(), // Registro.class); // startActivity(intent); // finish(); } }) .show(); } else if (error instanceof ServerError) { AlertDialog.Builder builder = new AlertDialog.Builder(SolicitarServicio.this.getActivity()); builder .setMessage("Error server, sin respuesta del servidor.") .setPositiveButton( "Aceptar", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { // Intent intent = new Intent(Pago.this.getApplicationContext(), // Registro.class); // startActivity(intent); // finish(); } }) .show(); } else if (error instanceof NetworkError) { AlertDialog.Builder builder = new AlertDialog.Builder(SolicitarServicio.this.getActivity()); builder .setMessage("Error de red, contacte a su proveedor de servicios.") .setPositiveButton( "Aceptar", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { // Intent intent = new Intent(Pago.this.getApplicationContext(), // Registro.class); // startActivity(intent); // finish(); } }) .show(); } else if (error instanceof ParseError) { AlertDialog.Builder builder = new AlertDialog.Builder(SolicitarServicio.this.getActivity()); builder .setMessage( "Error de conversión Parser, contacte a su proveedor de servicios.") .setPositiveButton( "Aceptar", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { // Intent intent = new Intent(Pago.this.getApplicationContext(), // Registro.class); // startActivity(intent); // finish(); } }) .show(); } progressBar.setVisibility(View.GONE); // buttonSeleccionarServicios.setVisibility(View.GONE); } }) { @Override public Map<String, String> getHeaders() throws AuthFailureError { HashMap<String, String> headers = new HashMap<String, String>(); headers.put("Content-Type", "application/json; charset=utf-8"); headers.put("WWW-Authenticate", "xBasic realm=".concat("")); headers.put("MyToken", sharedPreferences.getString("MyToken")); return headers; } }; jsonObjReq.setRetryPolicy( new DefaultRetryPolicy(10000, 3, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); ControllerSingleton.getInstance().addToReqQueue(jsonObjReq, ""); }
public static <T> void removeCacheFile(InputBase input, Class<T> clazz) { Cache cache = requestQueue.getCache(); Request<T> request = new GsonRequest<T>(input.method(), input.toString(), "", clazz, null, null, null, null); cache.remove(request.getCacheKey()); }
@Override public void run() { Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); Request request; while (true) { try { // Take a request from the queue. request = mQueue.take(); } catch (InterruptedException e) { // We may have been interrupted because it was time to quit. if (mQuit) { return; } continue; } try { request.addMarker("network-queue-take"); // If the request was cancelled already, do not perform the // network request. if (request.isCanceled()) { request.finish("network-discard-cancelled"); continue; } // Tag the request (if API >= 14) if (Build.VERSION.SDK_INT >= 14) { TrafficStats.setThreadStatsTag(request.getTrafficStatsTag()); } // Perform the network request. NetworkResponse networkResponse = mNetwork.performRequest(request); request.addMarker("network-http-complete"); // If the server returned 304 AND we delivered a response already, // we're done -- don't deliver a second identical response. if (networkResponse.notModified && request.hasHadResponseDelivered()) { request.finish("not-modified"); continue; } // Parse the response here on the worker thread. Response<?> response = request.parseNetworkResponse(networkResponse); request.addMarker("network-parse-complete"); // Write to cache if applicable. // TODO: Only update cache metadata instead of entire record for 304s. if (request.shouldCache() && response.cacheEntry != null) { mCache.put(request.getCacheKey(), response.cacheEntry); request.addMarker("network-cache-written"); } // Post the response back. request.markDelivered(); mDelivery.postResponse(request, response); } catch (VolleyError volleyError) { parseAndDeliverNetworkError(request, volleyError); } catch (Exception e) { VolleyLog.e(e, "Unhandled exception %s", e.toString()); mDelivery.postError(request, new VolleyError(e)); } } }