Android 项目(详解二)—— 网络连接(1)
来源:互联网 发布:软件任务单模版 编辑:程序博客网 时间:2024/05/29 15:42
利用观察者模式
分析:
- 手机提交数据到服务器:
提交的数据有: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>
0 0
- Android 项目(详解二)—— 网络连接(1)
- Android 项目(详解二)—— 网络连接(2)
- Android 项目实践(二)——网络连接
- Android 判断网络连接(二)
- Android学习之——(2)项目中的网络连接相关以及Bitmap处理学习
- 网络连接(二)
- android网络连接系列片之(二)----httpurlconnection
- Android网络连接判断与处理(二)
- Android项目技术总结:网络连接总结
- Android项目技术总结:网络连接总结
- Android网络编程(二)ConnectivityManager和NetworkInfo详解
- Android网络编程(二)ConnectivityManager和NetworkInfo详解
- Android网络编程(二)--Http协议详解
- Android Volley详解(二) 加载网络图片
- android网络编程——使用Android中的网络连接
- android网络编程——使用Android中的网络连接
- android网络编程——使用Android中的网络连接
- android网络编程——使用Android中的网络连接
- ocp-267
- ocp-268
- ocp-269
- ocp-270
- Core Animation(五)显式动画
- Android 项目(详解二)—— 网络连接(1)
- The content of the adapter has changed but ListView did not receive a notification.
- 微信消息推送协议简单分析
- OpenCv 如何对图像的像素进行操作
- ListView实现动态加载
- 买二手楼要擦亮双眼——程序猿买二手房必看案例
- Java基础:this关键字、super关键字
- APK反编译
- 【LeetCode从零单刷】Move Zeroes