单独的使用网络连接相信大家都一看就懂,一看就会,但是在实际项目中感觉然并卵啊!我们不可能在每个需要网络请求的界面都写个网络请求,那样不仅代码量增多且重复,因此要想个办法将所有的网络请求提取出来,每当有页面需要网络请求就调用同一个方法,方便简洁。
一、网络状态
这一部分不进行详细介绍,书上网上都有许多类似的代码不进行赘述。
public class NetWorkDect {
private static NetworkInfo networkInfo;
private static ConnectivityManager mConnectivityManager;
//该方法用于返回当前是否有网络
public static boolean checkNetworkState(){
if (BaseApplication.getBaseApplication() != null) {
mConnectivityManager = (ConnectivityManager) BaseApplication.getBaseApplication()
.getSystemService(BaseApplication.getBaseApplication().CONNECTIVITY_SERVICE);
networkInfo = mConnectivityManager.getActiveNetworkInfo();
//1.判断是否有网络连接
boolean networkAvailable = networkInfo.isAvailable();
return networkAvailable;
}
return false ;
}
//该方法用于获取当前网络连接的类型信息
public String typeNetwork(){
if(networkInfo!=null){
int networkType = networkInfo.getType();
if(ConnectivityManager.TYPE_WIFI == networkType){
//当前为wifi网络
return "当前为wifi";
}else if(ConnectivityManager.TYPE_MOBILE == networkType){
//当前为mobile网络
return "当前为流量";
}
}
return "当前无网络";
}
}
ps:注意添加权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
网络请求的封装与使用
网络请求的封装
这里采用Volley的请求方式进行简单的封装介绍。
思路:
1、采用单例(私有化构造器、公有的对象,公有的获得对象的方法),使得以后整个App的网络请求仅由一个实例进行,不会创建多个对象。
public class HttpUtils {
//Volley方式的请求队列
private RequestQueue requestQueue;
//私有化构造器
private HttpUtils() {
requestQueue = Volley.newRequestQueue(BaseApplication.getBaseApplication());
}
//公有的属性
private static HttpUtils mHttpUtils;
//公有的获得对象的方法也即单例,不然会浪费资源
public static synchronized HttpUtils newInstance() {
if (mHttpUtils == null) {
mHttpUtils = new HttpUtils();
}
return mHttpUtils;
}
//观察者模式,注意这里是public
public interface onMyHttpListener {
void onSuccess(String response);
void onFialed(String error);
void onNoNetWork();
}
//添加请求的方法
public void addStringRequest(String url, HashMap<String, String> params, final onMyHttpListener listener) {
//判断是否有网络
if (!NetWorkDect.checkNetworkState()) {
listener.onNoNetWork();
} else {
final StringRequest request = new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
listener.onSuccess(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
listener.onFialed(error.toString());
}
});
requestQueue.add(request);
}
}
}
网络请求的使用
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
HashMap<String,String> params=new HashMap<>();
HttpUtils.newInstance().addStringRequest("http://www.baidu.com", params, new HttpUtils.onMyHttpListener() {
@Override
public void onSuccess(String response) {
}
@Override
public void onFialed(String error) {
}
@Override
public void onNoNetWork() {
}
});
}
}
补充BaseApplication:
public class BaseApplication extends Application {
public static BaseApplication baseApplication;
@Override
public void onCreate() {
super.onCreate();
baseApplication=BaseApplication.this;
}
public static BaseApplication getBaseApplication() {
return baseApplication;
}
}