6.请求网络步骤

操作步骤都是:加载本地数据——如果没有请求服务器——服务器请求完保存数据——本地数据有了或者保存完数据了去解析数据

FileUtils

  1. public class FileUtils {
  2. public static final String CACHE = "cache";
  3. public static final String ICON = "icon";
  4. public static final String ROOT = "GooglePlay";
  5. /**
  6. * 获取图片的缓存的路径
  7. *
  8. * @return
  9. */
  10. public static File getIconDir() {
  11. return getDir(ICON);
  12. }
  13. /**
  14. * 获取缓存路径
  15. *
  16. * @return
  17. */
  18. public static File getCacheDir() {
  19. return getDir(CACHE);
  20. }
  21. public static File getDir(String cache) {
  22. StringBuilder path = new StringBuilder();
  23. if (isSDAvailable()) {
  24. path.append(Environment.getExternalStorageDirectory()
  25. .getAbsolutePath());
  26. path.append(File.separator);// ‘/‘
  27. path.append(ROOT);// /mnt/sdcard/GooglePlay
  28. path.append(File.separator);
  29. path.append(cache);// /mnt/sdcard/GooglePlay/cache
  30. } else {
  31. File filesDir = UiUtils.getContext().getCacheDir(); // cache
  32. // getFileDir
  33. // file
  34. path.append(filesDir.getAbsolutePath());// /data/data/com.itheima.googleplay/cache
  35. path.append(File.separator);// /data/data/com.itheima.googleplay/cache/
  36. path.append(cache);// /data/data/com.itheima.googleplay/cache/cache
  37. }
  38. File file = new File(path.toString());
  39. if (!file.exists() || !file.isDirectory()) {
  40. file.mkdirs();// 创建文件夹
  41. }
  42. return file;
  43. }
  44. private static boolean isSDAvailable() {
  45. if (Environment.getExternalStorageState().equals(
  46. Environment.MEDIA_MOUNTED)) {
  47. return true;
  48. } else {
  49. return false;
  50. }
  51. }
  52. }

BaseProtocol (协议)

  1. public abstract class BaseProtocol<T> {
  2. public T load(int index) {
  3. // 加载本地数据
  4. String json = loadLocal(index);
  5. if (json == null) {
  6. // 请求服务器
  7. json = loadServer(index);
  8. if (json != null) {
  9. saveLocal(json, index);
  10. }
  11. }
  12. if (json != null) {
  13. return paserJson(json);
  14. } else {
  15. return null;
  16. }
  17. }
  18. private String loadServer(int index) {
  19. HttpResult httpResult = HttpHelper.get(HttpHelper.URL +getKey()//请求网络,写xutils也行
  20. + "?index=" + index);
  21. String json = httpResult.getString();
  22. return json;
  23. }
  24. private void saveLocal(String json, int index) {
  25. BufferedWriter bw = null;
  26. try {
  27. File dir=FileUtils.getCacheDir();
  28. //在第一行写一个过期时间
  29. File file = new File(dir, getKey()+"_" + index); // /mnt/sdcard/googlePlay/cache/home_0
  30. FileWriter fw = new FileWriter(file);
  31. bw = new BufferedWriter(fw);
  32. bw.write(System.currentTimeMillis() + 1000 * 100 + "");//如果数字过期了重新请求网络
  33. bw.newLine();// 换行
  34. bw.write(json);// 把整个json文件保存起来
  35. bw.flush();
  36. bw.close();
  37. } catch (Exception e) {
  38. e.printStackTrace();
  39. }finally{
  40. IOUtils.closeQuietly(bw);//关流
  41. }
  42. }
  43. private String loadLocal(int index) {
  44. // 如果发现文件已经过期了 就不要再去复用缓存了
  45. File dir=FileUtils.getCacheDir();// 获取缓存所在的文件夹
  46. File file = new File(dir, getKey()+"_" + index);
  47. try {
  48. FileReader fr=new FileReader(file);
  49. BufferedReader br=new BufferedReader(fr);
  50. long outOfDate = Long.parseLong(br.readLine());
  51. if(System.currentTimeMillis()>outOfDate){
  52. return null;
  53. }else{
  54. String str=null;
  55. String sw=new StringWriter();
  56. while((str=br.readLine())!=null){
  57. sw.write(str);
  58. }
  59. return sw.toString();
  60. }
  61. } catch (Exception e) {
  62. e.printStackTrace();
  63. return null;
  64. }
  65. }
  66. /**
  67. * 解析json
  68. * @param json
  69. * @return
  70. */
  71. public abstract T paserJson(String json);
  72. /**
  73. * 说明了关键字
  74. * @return
  75. */
  76. public abstract String getKey();
  77. }

子类的请求网络只需要关心这俩个方法就行了

附件里有三个http请求访问的类,以后可以直接拿来用,比较方便

HttpHelper里是访问的主要代码

HttpRetry里是返回的结果

来自为知笔记(Wiz)

附件列表

时间: 2024-10-09 23:19:19

6.请求网络步骤的相关文章

安卓中自定义并使用Volley框架请求网络

大家好,今天我们讲一下如何使用Volley框架请求网络,为何要使用Volley框架,这就要先说一下使用Volley框架请求网络的优点了,volley是易于定制的,即你可以根据需求来设定volley框架,还有volley框架支持请求的优先级设定,即你可以自主设定网络请求的优先级,还有就是volley框架请求支持取消单个或多个请求,这个一会设置请求的时候会特别说明,还有它可以自动调度网络请求,至于其他的如代码的健壮性.支持多并发等等就不一一列举了,说了那么多下面就介绍如何自定义并使用Volley框架

Android开发请求网络方式详解

转载请注明出处:http://blog.csdn.net/allen315410/article/details/42643401 大家知道Google支持和发布的Android移动操作系统,主要是为了使其迅速占领移动互联网的市场份额,所谓移动互联网当然也是互联网了,凡是涉及互联网的任何软件任何程序都少不了联网模块的开发,诚然Android联网开发也是我们开发中至关重要的一部分,那么Android是怎么样进行联网操作的呢?这篇博客就简单的介绍一下Android常用的联网方式,包括JDK支持的Ht

Android通过请求网络获取图片资源

在日常的编写Android软件的过程中,避免不了使用网络请求,也不可能使用单机的Android,所以本次讲的是通过Android发送网络请求请求图片的文章. 我先来总结一下网络请求的几个步骤: 1.将想要请求的图片地址转换成URL类 2.通过openConnection来建立连接 3.在编程的时候我避免让用户死等,设置网络连接的超时时间,读取时间 4.设置请求网络的类型(GET或者POST) 5.提交网络请求 6.接受返回码,通过返回码判断网络是否请求成功 注意:这里非常重要,任何网络请求必须加

【黑马Android】(06)使用HttpClient方式请求网络/网易新闻案例

使用HttpClient方式请求网络 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"

NSURLSession请求网络-01-网络

/* 网络请求的流程: 1.构造NSURL连接地址 2.构造NSURLRequest请求对象,包含请求头和请求体信息. 3.构造NSURLSessionConfiguration,可选 4.构造NSURLSession会话对象 5.创建请求任务 6.发送网络请求 */ 1 // 2 // ViewController.m 3 // 01-NSURLSession请求网络 4 // 5 // 6 7 #import "ViewController.h" 8 9 @interface Vi

Android请求网络共通类——Hi_博客 Android App 开发笔记

今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. 思路: 1.把请求网络的方法放到一个类里面 2.创建一个接口将数据发给Activity 3.Activity 实现接口获得服务器返回的数据 4.解析数据 来我们一先来看第一步 请求网络 在这里请求网络我们用Volley .Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健

安卓开发时酷派手机不打印请求网络信息问题的解决

在做安卓开发的时候,肯定要用到调试了,但是我买的酷派大神F1居然不打印请求网络的日志,在百度上寻找了一下解决办法最终解决: 解决方案: 拨号盘输入*20121220#   ->  选择日记输出级别  ->  选择Java log level -> 选择LOGD即可 这样就能够打印日志了,这是因为机子出厂的时候做了一定的限制,重新设置一下就行了,我一开始还以为是Eclipse的版本问题呢,试了一下三星的手机,发现没问题,就只有是手机的问题了,就找到了这个解决方法!

android 请求网络异步加载

/** * 封装ProecssDialog对话框 * */ public class LoadDialog extends ProgressDialog { private String title = "进度对话框"; private String message = "加载数据中...."; public LoadDialog(Context context, int theme) { super(context, theme); } /** * 用默认的标题和

Android开发本地及网络Mp3音乐播放器(十一)使用Jsoup组件请求网络,并解析音乐数据

实现功能: 实现NetMusicListFragment(网络音乐界面) 实现net_music_list_layout.xml(网络音乐界面UI) 使用Jsoup组件请求网络,并解析音乐数据 截止到目前的源码下载: http://download.csdn.net/detail/iwanghang/9506985 Jsoup组件导入: AndroidStudio简单快速导入GitHub中的第三方组件 : http://blog.csdn.net/iwanghang/article/detail