您的位置:首页 > 理论基础 > 计算机网络

Android 项目(详解二)—— 网络连接(1)

2015-10-10 08:43 381 查看
利用观察者模式



分析:

手机提交数据到服务器:

提交的数据有:url、提交信息、提交方法

服务器端返回:

服务器返回网络情况:1.无网络连接。2.服务器超时。3.连接失败(比如url错误404,500,503)4.连接成功

用的网络连接的地方:

登陆、刷新等。

判断网络连接是否正常:

这里的例子是使用Volley,并利用post方法(使用get方法也是一样的)。

类:



1)InternetConnct类:

/**
* Created by Administrator on 2015/10/8.
* 网络连接类,需要网络连接时调用,判断1.是否有网络连接,2服务器是否超时,3,连接失败,4,连接成功
*/
public class InternetConnect {
//单例
private InternetConnect(){}
private static InternetConnect mMyInternetConnect;
public synchronized static InternetConnect newInstance(){
if (mMyInternetConnect==null){
mMyInternetConnect=new InternetConnect();
}
return mMyInternetConnect;
}

public interface onConnectionListener{
/**
* 没有网络连接
*/
public void onNullInternet();

/**
* 网络连接失败
* @param errorCode:错误码
*/
public void onFailConnection(int errorCode);

/**
* 网络连接成功
* @param response:服务器返回值
*/
public void onSuccess(String response);

}

/**
* 此方法的功能:使用dopost方法连接网络
*
* @param url:传入连接地址
* @param params :传入post需要的参数
* @param listener:传入监听器(使用时需要利用匿名内部类,其中实现onSucess,onError,onConnection方法)
*/

public void addReqest( String url, final HashMap<String,String> params, final onConnectionListener listener){

MySingleton.getInstance(AppApplication.getApplication()).getRequestQueue();//1.获得请求队列
//判断是否已连接网络
if(!NetworkUtils.isConnection(AppApplication.getApplication())){
listener.onNullInternet();
return;//如果没有连接直接返回
}

//2.创建http请求
StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {

@Override
public void onResponse(String response) {
// mTextView.setText("Response is: "+ response.substring(0,500));
listener.onSuccess(response);//网络连接正常返回了值
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
listener.onFailConnection(error.networkResponse.statusCode);//网络连接出错。

}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
//HashMap<String,String> map = mapString;
return params;
}
};
MySingleton.getInstance(AppApplication.getApplication()).addToRequestQueue(stringRequest);//3.添加请求到队列中

}

}


在类中创建一个接口,接口中必须实现了三个方法(成功,出错,连接网络是否正常),然后建一个方法,传入这个监听,在相应的位置调用这个方法。

这样就可以在其他地方使用啦,只需要匿名内部类实现三个方法,成功时运行什么,出错时运行什么,判断网络是否连接,都可以进行了。比如:

InternetConnect internetConnect = new InternetConnect();
internetConnect.addReqest(getApplicationContext(), "http://www.baidu.com", null, new InternetConnect.onConnectionListener() {
@Override
public void onFailConnection(String posence) {
mTextview.setText("成功");
}

@Override
public void onError() {
mTextview.setText("失败");

}

@Override
public void onNullInternet() {
mTextview.setText("连接");

}
});


2.Volley使用时需要的单例MySingleton类:

/**
* Created by 董梦娇 on 2015/10/8.
* 功能:此类是实现单例模式,实现请求队列的单例。
*/
public class MySingleton {
private static MySingleton mInstance;
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
private static Context mCtx;

private MySingleton(Context context) {
mCtx = context;
mRequestQueue = getRequestQueue();

mImageLoader = new ImageLoader(mRequestQueue,
new ImageLoader.ImageCache() {
private final LruCache<String, Bitmap>
cache = new LruCache<String, Bitmap>(20);

@Override
public Bitmap getBitmap(String url) {
return cache.get(url);
}

@Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url, bitmap);
}
});

}

public static synchronized MySingleton getInstance(Context context) {
if (mInstance == null) {
mInstance = new MySingleton(context);
}
return mInstance;
}
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
// getApplicationContext() is key, it keeps you from leaking the
// Activity or BroadcastReceiver if someone passes one in.
mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
}
return mRequestQueue;
}

public <T> void addToRequestQueue(Request<T> req) {
getRequestQueue().add(req);
}

public ImageLoader getImageLoader() {
return mImageLoader;
}
}


3.所有的网络连接集在一个类中MyAllHttpMethod类:

/**
* Created by 董梦娇 on 2015/10/10.
* 这里写所有的连接,包括登录注册等
*/
public class MyAllHttpMethod {
//单例
private MyAllHttpMethod(){}
private static MyAllHttpMethod myAllHttpMethod;
public synchronized static MyAllHttpMethod newInstance(){
if (myAllHttpMethod==null){
myAllHttpMethod=new MyAllHttpMethod();
}
return myAllHttpMethod;
}

public static void login(HashMap<String,String> params,InternetConnect.onConnectionListener listener){
InternetConnect.newInstance().addReqest(NetWorkConfig.URL_LOGIN,params,listener);

}
public static void register(){

}
public static void requestChart(){

}

}


工具包中关于网络连接的类:

NetworkUtils类:判断网络是否连接等的工具类

NetWorkConfig类:关于网络连接时用到的url。

menifest中的权限设置:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: