Skip to content

Commit

Permalink
增加Http网络请求隔离框架
Browse files Browse the repository at this point in the history
  • Loading branch information
youth5201314 committed Jun 12, 2017
1 parent 75cd7e2 commit f848b65
Show file tree
Hide file tree
Showing 19 changed files with 730 additions and 8 deletions.
8 changes: 7 additions & 1 deletion Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@

## 特性

**XFrame**主要有这些功能:(打钩的标示第一版本已完成,其他还在整理中)
**XFrame**主要有这些功能:

- [x] `XHttp`:Http网络请求隔离框架,解决高耦合!一行代码随意切换第三方网络请求库,可自动解析json,告别切换网络库繁琐操作
- [x] `XLog`:可输出漂亮容易查看的日志,支持Json、Xml、Map、List等格式输出,可全局配置
- [x] `XLoadingView`:简单实用的页面状态统一管理 ,加载中、无网络、无数据、出错等状态的随意切换
- [x] `XLoadingDialog`:简单实现加载等待对话框
Expand Down Expand Up @@ -59,7 +60,12 @@ compile project(':xframe')
- [yangfuhai/ASimpleCache](https://github.com/yangfuhai/ASimpleCache)


## 更新说明

#### v1.1.0
banner 优化更新
* 增加Http网络隔离框架
* 修改优化了一些bug



Expand Down
10 changes: 8 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,21 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
useLibrary 'org.apache.http.legacy'
}

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile project(':xframe')
compile 'com.android.support:design:25.2.0'
compile 'com.android.support:design:25.3.1'
compile 'com.youth.banner:banner:+'
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'cat.ereza:customactivityoncrash:1.5.0'
compile 'com.android.support.constraint:constraint-layout:1.0.2'

//网络框架,目前就列举这四种常用的
compile 'com.mcxiaoke.volley:library:1.0.19'
compile 'com.squareup.okhttp3:okhttp:3.8.0'
compile 'com.loopj.android:android-async-http:1.4.9'

compile 'com.alibaba:fastjson:1.1.57.android'
}
3 changes: 2 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@
<activity android:name=".ui.demo.XToastActivity" />
<activity android:name=".ui.demo.XLoadingViewActivity" />
<activity android:name=".ui.demo.XLoadingViewActivity2" />
<activity android:name=".ui.demo.XCacheActivity"></activity>
<activity android:name=".ui.demo.XCacheActivity" />
<activity android:name=".ui.demo.XHttpActivity"></activity>
</application>

</manifest>
9 changes: 9 additions & 0 deletions app/src/main/java/com/youth/xf/App.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.youth.xf;

import com.youth.xf.http.AsyncHttpEngine;
import com.youth.xf.http.OKHttpEngine;
import com.youth.xframe.base.XApplication;
import com.youth.xframe.XFrame;

Expand All @@ -14,5 +16,12 @@ public void onCreate() {
XFrame.initXLog();
XFrame.initXLoadingView()
.setErrorViewResId(R.layout._loading_layout_error);

/**
初始化网络请求的引擎,在这里可以一行代码切换,避免更换网络框架麻烦的问题
提供四种常见框架的简单案例:(你也可以按照例子自己实现)
AsyncHttpEngine、OKHttpEngine、VolleyHttpEngine
*/
XFrame.initXHttp(new AsyncHttpEngine());
}
}
241 changes: 241 additions & 0 deletions app/src/main/java/com/youth/xf/data/Weather.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,241 @@
package com.youth.xf.data;

import java.util.List;

/**
* 实体类和json对应
*/
public class Weather {

/**
* data : {"yesterday":{"date":"11日星期日","high":"高温 31℃","fx":"南风","low":"低温 18℃","fl":"微风","type":"阴"},"city":"北京","aqi":"71","forecast":[{"date":"12日星期一","high":"高温 27℃","fengli":"微风级","low":"低温 18℃","fengxiang":"南风","type":"阵雨"},{"date":"13日星期二","high":"高温 29℃","fengli":"微风级","low":"低温 17℃","fengxiang":"南风","type":"多云"},{"date":"14日星期三","high":"高温 34℃","fengli":"微风级","low":"低温 23℃","fengxiang":"南风","type":"晴"},{"date":"15日星期四","high":"高温 36℃","fengli":"微风级","low":"低温 24℃","fengxiang":"南风","type":"晴"},{"date":"16日星期五","high":"高温 34℃","fengli":"3-4级","low":"低温 23℃","fengxiang":"南风","type":"阴"}],"ganmao":"相对今天出现了较大幅度降温,较易发生感冒,体质较弱的朋友请注意适当防护。","wendu":"26"}
* status : 1000
* desc : OK
*/

private DataBean data;
private int status;
private String desc;

public DataBean getData() {
return data;
}

public void setData(DataBean data) {
this.data = data;
}

public int getStatus() {
return status;
}

public void setStatus(int status) {
this.status = status;
}

public String getDesc() {
return desc;
}

public void setDesc(String desc) {
this.desc = desc;
}

public static class DataBean {
/**
* yesterday : {"date":"11日星期日","high":"高温 31℃","fx":"南风","low":"低温 18℃","fl":"微风","type":"阴"}
* city : 北京
* aqi : 71
* forecast : [{"date":"12日星期一","high":"高温 27℃","fengli":"微风级","low":"低温 18℃","fengxiang":"南风","type":"阵雨"},{"date":"13日星期二","high":"高温 29℃","fengli":"微风级","low":"低温 17℃","fengxiang":"南风","type":"多云"},{"date":"14日星期三","high":"高温 34℃","fengli":"微风级","low":"低温 23℃","fengxiang":"南风","type":"晴"},{"date":"15日星期四","high":"高温 36℃","fengli":"微风级","low":"低温 24℃","fengxiang":"南风","type":"晴"},{"date":"16日星期五","high":"高温 34℃","fengli":"3-4级","low":"低温 23℃","fengxiang":"南风","type":"阴"}]
* ganmao : 相对今天出现了较大幅度降温,较易发生感冒,体质较弱的朋友请注意适当防护。
* wendu : 26
*/

private YesterdayBean yesterday;
private String city;
private String aqi;
private String ganmao;
private String wendu;
private List<ForecastBean> forecast;

public YesterdayBean getYesterday() {
return yesterday;
}

public void setYesterday(YesterdayBean yesterday) {
this.yesterday = yesterday;
}

public String getCity() {
return city;
}

public void setCity(String city) {
this.city = city;
}

public String getAqi() {
return aqi;
}

public void setAqi(String aqi) {
this.aqi = aqi;
}

public String getGanmao() {
return ganmao;
}

public void setGanmao(String ganmao) {
this.ganmao = ganmao;
}

public String getWendu() {
return wendu;
}

public void setWendu(String wendu) {
this.wendu = wendu;
}

public List<ForecastBean> getForecast() {
return forecast;
}

public void setForecast(List<ForecastBean> forecast) {
this.forecast = forecast;
}

public static class YesterdayBean {
/**
* date : 11日星期日
* high : 高温 31℃
* fx : 南风
* low : 低温 18℃
* fl : 微风
* type : 阴
*/

private String date;
private String high;
private String fx;
private String low;
private String fl;
private String type;

public String getDate() {
return date;
}

public void setDate(String date) {
this.date = date;
}

public String getHigh() {
return high;
}

public void setHigh(String high) {
this.high = high;
}

public String getFx() {
return fx;
}

public void setFx(String fx) {
this.fx = fx;
}

public String getLow() {
return low;
}

public void setLow(String low) {
this.low = low;
}

public String getFl() {
return fl;
}

public void setFl(String fl) {
this.fl = fl;
}

public String getType() {
return type;
}

public void setType(String type) {
this.type = type;
}
}

public static class ForecastBean {
/**
* date : 12日星期一
* high : 高温 27℃
* fengli : 微风级
* low : 低温 18℃
* fengxiang : 南风
* type : 阵雨
*/

private String date;
private String high;
private String fengli;
private String low;
private String fengxiang;
private String type;

public String getDate() {
return date;
}

public void setDate(String date) {
this.date = date;
}

public String getHigh() {
return high;
}

public void setHigh(String high) {
this.high = high;
}

public String getFengli() {
return fengli;
}

public void setFengli(String fengli) {
this.fengli = fengli;
}

public String getLow() {
return low;
}

public void setLow(String low) {
this.low = low;
}

public String getFengxiang() {
return fengxiang;
}

public void setFengxiang(String fengxiang) {
this.fengxiang = fengxiang;
}

public String getType() {
return type;
}

public void setType(String type) {
this.type = type;
}
}
}
}
73 changes: 73 additions & 0 deletions app/src/main/java/com/youth/xf/http/AsyncHttpEngine.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package com.youth.xf.http;

import com.alibaba.fastjson.JSON;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;
import com.youth.xframe.utils.http.HttpCallBack;
import com.youth.xframe.utils.http.IHttpEngine;
import com.youth.xframe.utils.http.XHttp;


import java.util.Map;

import cz.msebera.android.httpclient.Header;

/**
* AsyncHttp简单实现,你可修改,这只是案例
*/
public class AsyncHttpEngine implements IHttpEngine {
private AsyncHttpClient client;

public AsyncHttpEngine() {
client = new AsyncHttpClient();
}

@Override
public void get(String url, Map<String, Object> params, final HttpCallBack callBack) {
RequestParams requestParams = new RequestParams();
if(null!=params) {
for (String key : params.keySet()) {
requestParams.put(key, params.get(key));
}
}
client.get(url, requestParams, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
String result=new String(responseBody);
Class<?> cls= XHttp.analysisClassInfo(callBack);
//我这里使用的是fastjson,你也可以用gson,jackjson等
callBack.onSuccess(JSON.parseObject(result,cls));
}

@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
callBack.onFailed(error.toString());
}
});
}

@Override
public void post(String url, Map<String, Object> params, final HttpCallBack callBack) {
RequestParams requestParams = new RequestParams();
if(null!=params) {
for (String key : params.keySet()) {
requestParams.put(key, params.get(key));
}
}
client.post(url, requestParams, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
String result=new String(responseBody);
Class<?> cls= XHttp.analysisClassInfo(callBack);
//我这里使用的是fastjson,你也可以用gson,jackjson等
callBack.onSuccess(JSON.parseObject(result,cls));
}

@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
callBack.onFailed(error.toString());
}
});
}
}
Loading

0 comments on commit f848b65

Please sign in to comment.