├── .gitignore ├── .idea ├── .name ├── compiler.xml ├── copyright │ └── profiles_settings.xml ├── gradle.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── vcs.xml ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── example │ │ └── administrator │ │ └── okhttplemondemo │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── example │ │ │ └── administrator │ │ │ └── okhttplemondemo │ │ │ ├── MainActivity.java │ │ │ ├── MainPageBean.java │ │ │ └── MyApplication.java │ └── res │ │ ├── layout │ │ └── activity_main.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── example │ └── administrator │ └── okhttplemondemo │ └── ExampleUnitTest.java ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── logo ├── aaa.png └── bbb.png └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | OkhttpLemonDemo -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 18 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 46 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## [我的博客](http://blog.csdn.net/sw5131899/article/details/61429679) 2 | 3 | 一个项目,访问网络那是必须的。现在开源的网络框架很多。比如最开始的HeepClient,Volley,xUtils, 4 | 最近很火的okhttp,还有例如retrofit,okGo这些都是很不错 的框架。但是毕竟是别人写的。出了什么问题都不好查找。 5 | 这里自己封装了一个网络框架。基于okhttp的高并发网络加载,同时也对下载文件进行了封装,使用数据库做下载记录缓存, 6 | 暴露给调用层下载进度显示回调。如果有单独需要下载进度显示的,可以把这部分逻辑抠出去,耦合很小,是按功能分包的。 7 | 这里简单介绍一下封装逻辑。 8 | 9 | ### 设计框架逻辑图 10 | 11 | ![](https://github.com/SingleShu/OkHttpLemonDemo/raw/master/logo/aaa.png) 12 | 13 | 14 | ### UML 15 | 16 | ![](https://github.com/SingleShu/OkHttpLemonDemo/raw/master/logo/bbb.png) 17 | 18 | 使用导入: 19 | ```Java 20 | compile 'com.singleshu88:OkHttpLemon:1.0.2' 21 | ``` 22 | 23 | 采用链式调度,使用builder的设计模式,对参数进行缓存。所有调用都是OkHttpLemon静态链式调度。最后必须调用execute。 24 | ## 具体API ## 25 | 26 | ### .init() 27 | OkHttpLemon的初始化。 28 | 29 | ### .initOptions() 30 | 初始化全局变量,也就是设置响应时间之类的参数。 31 | 32 | ### .url(String url) 33 | 设置url不论是下载文件,上传,还是get,post都是在这里设置url 34 | 35 | ### .get(Class responseClazz) 36 | 使用get请求获取参数,同时设置响应类型。 37 | 38 | ### .get() 39 | 使用get,默认返回String类型 40 | 41 | ### .postString(String key,String value) 42 | 使用post上传参数,可以多次调用。 43 | 44 | ### .postFile(String name,String fileName,File imgFile) 45 | 使用post上传文件,图片之类。 46 | 47 | ### .postResponseClazz(Class responseClazz) 48 | 使用post请求,设置响应类型 49 | 50 | ### .executes(@NonNull IDataListener dataListener) 51 | 执行网络请求,返回String类型 52 | 53 | ### .execute(@NonNull IDataListener dataListener) 54 | 执行网络请求,返回设置类型 55 | 56 | 这些都是常用的网络请求方式,还单独封装了文件下载。 57 | 58 | ### .downPriority(HttpPriority priority) 59 | 设置下载文件的优先级,一个枚举类型,分别有low,middle,high 60 | 61 | ### .downFilePath(String filePath) 62 | 下载文件保存的地址,sdcard/0/wps.apk 包括全名 63 | 64 | ### .pause(String url) 65 | 通过下载地址来暂停下载进度 66 | 67 | ### .pause(String url,String fileName) 68 | 通过下载地址和保存文件地址来暂停下载进度 69 | 70 | ### .start(String url) 71 | 通过下载地址来重启一个文件下载 72 | 73 | ### .start(String url,String filePath) 74 | 通过下载地址和文件保存地址来准确的重启一个被暂停的文件下载 75 | 76 | ### .getOptions() 77 | 设置网络链接超时等参数 78 | 79 | 80 | ### .executeDown(@NonNull IDownloadCallback dataCallback) 81 | 执行文件下载 82 | 83 | ## 具体使用 84 | 85 | ```Java 86 | /** 87 | * Created by ShuWen on 2017/3/11. 88 | */ 89 | 90 | public class MyApplication extends Application { 91 | @Override 92 | public void onCreate() { 93 | super.onCreate(); 94 | OkHttpLemon.init().initOptions(); 95 | } 96 | } 97 | ``` 98 | 99 | ```Java 100 | package com.example.administrator.okhttplemondemo; 101 | 102 | import android.os.Environment; 103 | import android.support.annotation.NonNull; 104 | import android.support.v7.app.AppCompatActivity; 105 | import android.os.Bundle; 106 | import android.util.Log; 107 | import android.view.View; 108 | 109 | import com.example.lemonlibrary.db.util.PermissionUtils; 110 | import com.example.lemonokhttp.enums.DownloadStatus; 111 | import com.example.lemonokhttp.http.OkHttpLemon; 112 | import com.example.lemonokhttp.interfaces.IDataListener; 113 | import com.example.lemonokhttp.interfaces.IDownloadCallback; 114 | 115 | public class MainActivity extends AppCompatActivity { 116 | 117 | public String tabaoUrl = "http://download.apk8.com/soft/2015/%E6%B7%98%E5%AE%9D.apk"; 118 | public String wpsUrl = "http://gdown.baidu.com/data/wisegame/8be18d2c0dc8a9c9/WPSOffice_177.apk"; 119 | 120 | @Override 121 | protected void onCreate(Bundle savedInstanceState) { 122 | super.onCreate(savedInstanceState); 123 | setContentView(R.layout.activity_main); 124 | PermissionUtils.getInstance().requestPermission(this); 125 | } 126 | 127 | @Override 128 | public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 129 | super.onRequestPermissionsResult(requestCode, permissions, grantResults); 130 | PermissionUtils.getInstance().onRequestPermissionsResult(requestCode,permissions,grantResults,this); 131 | } 132 | 133 | public void click(View view){ 134 | switch (view.getId()){ 135 | case R.id.btn1: 136 | Log.i("tag00","下载wps:"); 137 | OkHttpLemon.init() 138 | .url(wpsUrl) 139 | .downFilePath(Environment.getExternalStorageDirectory() + "/wps.apk") 140 | .executeDown(new IDownloadCallback() { 141 | @Override 142 | public void onDownTotalLength(long totalLen) { 143 | 144 | } 145 | 146 | @Override 147 | public void onDownCurrentLenChange(long alreadyDownLen, double downPercent, long speed) { 148 | Log.i("tag00","-----已下载 "+ alreadyDownLen/1024/1024+"M 下载长度 "+downPercent*100 +"% "+"下载速度:"+ speed/1000 +"k/s"); 149 | } 150 | 151 | @Override 152 | public void onFinish(long alreadyDownLen, long totalLen, String stratTime, String finishTime) { 153 | Log.i("tag00","下载成功。" + stratTime + " "+finishTime); 154 | } 155 | 156 | 157 | @Override 158 | public void onEorror(int errorCode, String ts) { 159 | Log.i("tag00","下载异常:"+" errorCode: " + errorCode +" errorMsg " +ts); 160 | 161 | } 162 | 163 | @Override 164 | public void onDownStatusChange(DownloadStatus downStatus) { 165 | Log.i("tag00","状态变更:"+downStatus); 166 | } 167 | }); 168 | 169 | break; 170 | case R.id.btn2: 171 | //默认下载文件地址 sdcard/okLemonDown/downFiles 172 | Log.i("tag00","下载game:"); 173 | OkHttpLemon.init() 174 | .url(tabaoUrl) 175 | .executeDown(new IDownloadCallback() { 176 | @Override 177 | public void onDownTotalLength(long totalLen) { 178 | 179 | } 180 | 181 | @Override 182 | public void onDownCurrentLenChange(long alreadyDownLen, double downPercent, long speed) { 183 | Log.i("tag00","-----已下载 "+ alreadyDownLen/1024/1024+"M 下载长度 "+downPercent*100 +"% "+"下载速度:"+ speed/1000 +"k/s"); 184 | } 185 | 186 | @Override 187 | public void onFinish(long alreadyDownLen, long totalLen, String stratTime, String finishTime) { 188 | Log.i("tag00","下载成功。"); 189 | 190 | } 191 | 192 | @Override 193 | public void onEorror(int errorCode, String ts) { 194 | Log.i("tag00","下载异常:"+" errorCode: " + errorCode +" errorMsg " +ts); 195 | 196 | } 197 | 198 | @Override 199 | public void onDownStatusChange(DownloadStatus downStatus) { 200 | Log.i("tag00","状态变更:"+downStatus); 201 | } 202 | }); 203 | break; 204 | case R.id.btn3: 205 | OkHttpLemon.init().pause(wpsUrl); 206 | break; 207 | case R.id.btn5: 208 | OkHttpLemon.init().start(wpsUrl); 209 | break; 210 | case R.id.btn4: 211 | OkHttpLemon.init().pause(tabaoUrl); 212 | break; 213 | case R.id.btn6: 214 | OkHttpLemon.init().start(tabaoUrl); 215 | break; 216 | case R.id.btn7: 217 | OkHttpLemon.init().url("http://v3.wufazhuce.com:8000/api/hp/idlist/0") 218 | .get(MainPageBean.class) 219 | .execute(new IDataListener() { 220 | @Override 221 | public void onSuccess(MainPageBean s) { 222 | Log.i("tag00",s.getRes()+""); 223 | for (String s1:s.getData()) { 224 | Log.i("tag00",s1); 225 | } 226 | } 227 | 228 | @Override 229 | public void onError(int code,String ts) { 230 | 231 | } 232 | }); 233 | break; 234 | case R.id.btn8: 235 | OkHttpLemon.init().url("http://v3.wufazhuce.com:8000/api/praise/add") 236 | .postString("itemid","1644") 237 | .postString("type","hpcontent") 238 | .postString("deviceid","ffffffff-b821-e83f-45c3-423b5c7ea996") 239 | .postString("version","3.5.0") 240 | .postString("devicetype","android") 241 | .postString("platform","android") 242 | .executes(new IDataListener() { 243 | @Override 244 | public void onSuccess(String s) { 245 | Log.i("tag00",s); 246 | } 247 | 248 | @Override 249 | public void onError(int code, String ts) { 250 | Log.i("tag00","code:"+code + "提示:"+ts); 251 | } 252 | }); 253 | break; 254 | } 255 | 256 | } 257 | } 258 | ``` 259 | 260 | ```Java 261 | package com.example.administrator.okhttplemondemo; 262 | 263 | import java.util.List; 264 | 265 | /** 266 | * Created by ShuWen on 2016/10/26. 267 | */ 268 | 269 | public class MainPageBean { 270 | 271 | /** 272 | * res : 0 273 | * data : ["1509","1505","1506","1504","1497","1503","1498","1502","1501","1500"] 274 | */ 275 | 276 | private int res; 277 | private List data; 278 | 279 | public int getRes() { 280 | return res; 281 | } 282 | 283 | public void setRes(int res) { 284 | this.res = res; 285 | } 286 | 287 | public List getData() { 288 | return data; 289 | } 290 | 291 | public void setData(List data) { 292 | this.data = data; 293 | } 294 | 295 | @Override 296 | public String toString() { 297 | return "MainPageBean{" + 298 | "res=" + res + 299 | ", data=" + data + 300 | '}'; 301 | } 302 | } 303 | ``` 304 | 这个网络加载框架的文件下载的设计还是可以提供参考的,使用了我之前设计的LemonDao的数据库框架扩展性很强。 305 | 觉得学到东西了的朋友请给个star。谢谢! 306 | 307 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 25 5 | buildToolsVersion "25.0.2" 6 | defaultConfig { 7 | applicationId "com.example.administrator.okhttplemondemo" 8 | minSdkVersion 14 9 | targetSdkVersion 25 10 | versionCode 1 11 | versionName "1.0" 12 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | } 21 | 22 | dependencies { 23 | compile fileTree(dir: 'libs', include: ['*.jar']) 24 | androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 25 | exclude group: 'com.android.support', module: 'support-annotations' 26 | }) 27 | compile 'com.android.support:appcompat-v7:25.1.0' 28 | testCompile 'junit:junit:4.12' 29 | compile 'com.singleshu88:OkHttpLemon:1.0.2' 30 | } 31 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in G:\sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/example/administrator/okhttplemondemo/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.example.administrator.okhttplemondemo; 2 | 3 | import android.content.Context; 4 | import android.support.test.InstrumentationRegistry; 5 | import android.support.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.*; 11 | 12 | /** 13 | * Instrumentation test, which will execute on an Android device. 14 | * 15 | * @see Testing documentation 16 | */ 17 | @RunWith(AndroidJUnit4.class) 18 | public class ExampleInstrumentedTest { 19 | @Test 20 | public void useAppContext() throws Exception { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("com.example.administrator.okhttplemondemo", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/okhttplemondemo/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.administrator.okhttplemondemo; 2 | 3 | import android.os.Environment; 4 | import android.support.annotation.NonNull; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.os.Bundle; 7 | import android.util.Log; 8 | import android.view.View; 9 | 10 | import com.example.lemonlibrary.db.util.PermissionUtils; 11 | import com.example.lemonokhttp.enums.DownloadStatus; 12 | import com.example.lemonokhttp.http.OkHttpLemon; 13 | import com.example.lemonokhttp.interfaces.IDataListener; 14 | import com.example.lemonokhttp.interfaces.IDownloadCallback; 15 | 16 | public class MainActivity extends AppCompatActivity { 17 | 18 | public String tabaoUrl = "http://download.apk8.com/soft/2015/%E6%B7%98%E5%AE%9D.apk"; 19 | public String wpsUrl = "http://gdown.baidu.com/data/wisegame/8be18d2c0dc8a9c9/WPSOffice_177.apk"; 20 | 21 | @Override 22 | protected void onCreate(Bundle savedInstanceState) { 23 | super.onCreate(savedInstanceState); 24 | setContentView(R.layout.activity_main); 25 | PermissionUtils.getInstance().requestPermission(this); 26 | } 27 | 28 | @Override 29 | public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 30 | super.onRequestPermissionsResult(requestCode, permissions, grantResults); 31 | PermissionUtils.getInstance().onRequestPermissionsResult(requestCode,permissions,grantResults,this); 32 | } 33 | 34 | public void click(View view){ 35 | switch (view.getId()){ 36 | case R.id.btn1: 37 | Log.i("tag00","下载wps:"); 38 | OkHttpLemon.init() 39 | .url(wpsUrl) 40 | .downFilePath(Environment.getExternalStorageDirectory() + "/wps.apk") 41 | .executeDown(new IDownloadCallback() { 42 | @Override 43 | public void onDownTotalLength(long totalLen) { 44 | 45 | } 46 | 47 | @Override 48 | public void onDownCurrentLenChange(long alreadyDownLen, double downPercent, long speed) { 49 | Log.i("tag00","-----已下载 "+ alreadyDownLen/1024/1024+"M 下载长度 "+downPercent*100 +"% "+"下载速度:"+ speed/1000 +"k/s"); 50 | } 51 | 52 | @Override 53 | public void onFinish(long alreadyDownLen, long totalLen, String stratTime, String finishTime) { 54 | Log.i("tag00","下载成功。" + stratTime + " "+finishTime); 55 | } 56 | 57 | 58 | @Override 59 | public void onEorror(int errorCode, String ts) { 60 | Log.i("tag00","下载异常:"+" errorCode: " + errorCode +" errorMsg " +ts); 61 | 62 | } 63 | 64 | @Override 65 | public void onDownStatusChange(DownloadStatus downStatus) { 66 | Log.i("tag00","状态变更:"+downStatus); 67 | } 68 | }); 69 | 70 | break; 71 | case R.id.btn2: 72 | //默认下载文件地址 sdcard/okLemonDown/downFiles 73 | Log.i("tag00","下载game:"); 74 | OkHttpLemon.init() 75 | .url(tabaoUrl) 76 | .executeDown(new IDownloadCallback() { 77 | @Override 78 | public void onDownTotalLength(long totalLen) { 79 | 80 | } 81 | 82 | @Override 83 | public void onDownCurrentLenChange(long alreadyDownLen, double downPercent, long speed) { 84 | Log.i("tag00","-----已下载 "+ alreadyDownLen/1024/1024+"M 下载长度 "+downPercent*100 +"% "+"下载速度:"+ speed/1000 +"k/s"); 85 | } 86 | 87 | @Override 88 | public void onFinish(long alreadyDownLen, long totalLen, String stratTime, String finishTime) { 89 | Log.i("tag00","下载成功。"); 90 | 91 | } 92 | 93 | @Override 94 | public void onEorror(int errorCode, String ts) { 95 | Log.i("tag00","下载异常:"+" errorCode: " + errorCode +" errorMsg " +ts); 96 | 97 | } 98 | 99 | @Override 100 | public void onDownStatusChange(DownloadStatus downStatus) { 101 | Log.i("tag00","状态变更:"+downStatus); 102 | } 103 | }); 104 | break; 105 | case R.id.btn3: 106 | OkHttpLemon.init().pause(wpsUrl); 107 | break; 108 | case R.id.btn5: 109 | OkHttpLemon.init().start(wpsUrl); 110 | break; 111 | case R.id.btn4: 112 | OkHttpLemon.init().pause(tabaoUrl); 113 | break; 114 | case R.id.btn6: 115 | OkHttpLemon.init().start(tabaoUrl); 116 | break; 117 | case R.id.btn7: 118 | OkHttpLemon.init().url("http://v3.wufazhuce.com:8000/api/hp/idlist/0") 119 | .get(MainPageBean.class) 120 | .execute(new IDataListener() { 121 | @Override 122 | public void onSuccess(MainPageBean s) { 123 | Log.i("tag00",s.getRes()+""); 124 | for (String s1:s.getData()) { 125 | Log.i("tag00",s1); 126 | } 127 | } 128 | 129 | @Override 130 | public void onError(int code,String ts) { 131 | 132 | } 133 | }); 134 | break; 135 | case R.id.btn8: 136 | OkHttpLemon.init().url("http://v3.wufazhuce.com:8000/api/praise/add") 137 | .postString("itemid","1644") 138 | .postString("type","hpcontent") 139 | .postString("deviceid","ffffffff-b821-e83f-45c3-423b5c7ea996") 140 | .postString("version","3.5.0") 141 | .postString("devicetype","android") 142 | .postString("platform","android") 143 | .executes(new IDataListener() { 144 | @Override 145 | public void onSuccess(String s) { 146 | Log.i("tag00",s); 147 | } 148 | 149 | @Override 150 | public void onError(int code, String ts) { 151 | Log.i("tag00","code:"+code + "提示:"+ts); 152 | } 153 | }); 154 | break; 155 | } 156 | 157 | } 158 | } 159 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/okhttplemondemo/MainPageBean.java: -------------------------------------------------------------------------------- 1 | package com.example.administrator.okhttplemondemo; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * Created by ShuWen on 2016/10/26. 7 | */ 8 | 9 | public class MainPageBean { 10 | 11 | /** 12 | * res : 0 13 | * data : ["1509","1505","1506","1504","1497","1503","1498","1502","1501","1500"] 14 | */ 15 | 16 | private int res; 17 | private List data; 18 | 19 | public int getRes() { 20 | return res; 21 | } 22 | 23 | public void setRes(int res) { 24 | this.res = res; 25 | } 26 | 27 | public List getData() { 28 | return data; 29 | } 30 | 31 | public void setData(List data) { 32 | this.data = data; 33 | } 34 | 35 | @Override 36 | public String toString() { 37 | return "MainPageBean{" + 38 | "res=" + res + 39 | ", data=" + data + 40 | '}'; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/administrator/okhttplemondemo/MyApplication.java: -------------------------------------------------------------------------------- 1 | package com.example.administrator.okhttplemondemo; 2 | 3 | import android.app.Application; 4 | 5 | import com.example.lemonokhttp.http.OkHttpLemon; 6 | 7 | /** 8 | * Created by ShuWen on 2017/3/11. 9 | */ 10 | 11 | public class MyApplication extends Application { 12 | @Override 13 | public void onCreate() { 14 | super.onCreate(); 15 | OkHttpLemon.init().initOptions(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 |