Android 网络通信基类的实现

为了方便我们与服务器的通信,我们需要实现一个网络通信基类。

实现代码如下:

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.MalformedURLException;

import java.net.URL;

import java.net.URLConnection;

import com.jikexueyuan.secret.Config;

import android.os.AsyncTask;

public class NetConnection {

/**

*

* @param url             通信地址

* @param method          通信方法  get post

* @param successCallback 通知调用者 成功

* @param failCallback    通知调用者 失败

* @param kvs             通信可变字符串参数

*/

public NetConnection(final String url,final HttpMethod method,final SuccessCallback successCallback,final FailCallback failCallback,final String ...kvs){

//网络链接会阻塞主线程,需要异步任务执行网络链接

new AsyncTask<Void, Void, String>() {

@Override

protected String doInBackground(Void... arg0) {

StringBuffer paramsStr = new StringBuffer();

for (int i = 0; i < kvs.length; i+=2) {

paramsStr.append(kvs[i]).append("=").append(kvs[i+1]).append("&");

}

try {

URLConnection uc;

switch (method) {

case POST:  //以post方式通信

uc = new URL(url).openConnection();

uc.setDoOutput(true);

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(uc.getOutputStream(), Config.CHARSET));

bw.write(paramsStr.toString());

bw.flush();

break;

default:   //以get方式通信

uc = new URL(url+"?"+paramsStr.toString()).openConnection();

break;

}

System.out.println("Request url:"+uc.getURL());

System.out.println("Request data:"+paramsStr);

BufferedReader br = new BufferedReader(new InputStreamReader(uc.getInputStream(), Config.CHARSET));

String line = null;

StringBuffer result = new StringBuffer();

while((line=br.readLine()) != null){

result.append(line);

}

System.out.println("Result" + result);

return result.toString();

} catch (MalformedURLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

//通知调用者

@Override

protected void onPostExecute(String result) {

super.onPostExecute(result);

if(result != null){

if(successCallback != null){

successCallback.onSuccess(result);

}

}else{

if(failCallback != null){

failCallback.onFaid();

}

}

}

}.execute();

}

public static interface SuccessCallback{

void onSuccess(String result);

}

public static interface FailCallback{

void onFaid();

}

}

时间: 2024-10-09 16:33:56

Android 网络通信基类的实现的相关文章

android Activity基类通用方法

public class BaseActivity extends Activity { Resources res; // 通用资源缩写 @Override protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE);// 不显示标题 super.onCreate(savedInstanceState); res = getResources(); // 通

【Android先进】我们为什么要创建Activity基类Activity什么是一般的基类方法

今天,它可以被视为只是基本完成了其首个商业项目,在发展过程中,风格,然而随着工作经验的积累.最终開始慢慢的了解到抽象思想在面向对象编程中的重要性,这一篇简单的介绍一下我的一点收获. 首先,在如今的项目中使用的主要是afinal框架,并且这个框架确实比較不错,省去了不少工作量.在编写Activity的过程中,基本都是直接继承自FinalActivity类,这样能够使用这个类给我们封装好的不少的方法,可是随着项目慢慢推进,这样的直接继承框架类的一些缺点也開始慢慢的显现出来.最基本的就是扩展性受到了一

Android 开发技巧 - Android 6.0 以上权限大坑和权限检查基类封装

简单介绍 关于运行时权限的说法,早在Google发布android 6.0的时候,大家也听得蛮多的.从用户的角度来讲,用户是受益方,更好的保护用户的意思,而对于开发者来说,无疑增加了工作量. 对于6.0以下的权限在安装时,会根据权限声明产生一个权限列表,用户只有同意才能完成app的安装.而在6.0以后,不需要先对权限授权就可以安装app,对于权限的授权我们可以选择禁止. 在新的权限机制中,Google将权限分为两类: Normal Permissions(普通权限):不涉及用户隐私,不需要用户进

Android基类设计方法详解

1 为什么要设计基类 为什么要给程序设计基类呢?主要是出于2个原因,一是方便代码编写,减少重复代码和冗余逻辑,优化代码:二是优化程序架构,降低耦合度,方便拓展.修改. ok,编写代码是程序员的第一步,那么第二步就是要编写高质量的代码,代码能实现功能是一方面,写的优美则是另一方面,这也是我们所有攻城狮们应该追求的境界. 2 设计基类的基本思路 那么,哪些东西我们需要抽象到基类中呢? 2.1 重复的代码:如果一个逻辑是大多数子类都需要使用的 2.2 臭而长的代码:典型的findviewbyid.To

【Android进阶】为什么要创建Activity基类以及Activity基类中一般有哪些方法

现在也算是刚刚基本完成了自己的第一个商业项目,在开发的过程中,参考了不少人的代码风格,然而随着工作经验的积累,终于开始慢慢的了解到抽象思想在面向对象编程中的重要性,这一篇简单的介绍一下我的一点收获. 首先,在现在的项目中使用的主要是afinal框架,而且这个框架确实比较不错,省去了不少工作量,在编写Activity的过程中,基本都是直接继承自FinalActivity类,这样可以使用这个类给我们封装好的不少的方法,但是随着项目慢慢推进,这种直接继承框架类的一些缺点也开始慢慢的显现出来.最主要的就

(转)Android中的基类—抽取出来公共的方法

在Android中,一般来说一个应用会存在几十个页面,并且一个应用一般也会使用一个特定的主题,其中的页面的风格也是一致的,并且页面中的动画效果.页面的切换效果等也应该保持同样的风格,那么就需要一个基类,来完成页面的基础设置,这就是所谓的基类. 界面统一管理原因 当应用中的界面达到一定数量级时,如几十个界面,便于项目管理 提高界面的处理速度 避免由于多Activity导致的问题 界面统一管理的基础 当应用中的界面达到一定数量级时,为了能够让用户更容易操作上手,产品设计时会将界面显示风格进行统一.

android基类Adapter

import android.content.Context; import android.widget.BaseAdapter; import java.util.List; /** * 基类Adapter * Created by Administrator on 2015/10/22 0022. */ public abstract class MyBaseAdapter<T> extends BaseAdapter { protected Context mContext; publ

Android App框架设计之编写基类BaseActivity

Android App框架设计之编写基类BaseActivity 编写基类BaseActivity - OOP里面子类里面能够共享父类的方法,提高代码的可复用性 - 基类的编写要根据实际项目的情况,有的可能很简单 比如只是显示 "关于" 信息, 业务功能非常少 你可以不用继承基类进行扩展 BaseActivity继承Activity 还是 FragmentActivity 还是其它? 也是根据你的技术要求,因为解决问题的方法有很多种,或者你根本不用写基类也能完成工作. 我们的目的是编写

Android中的基类—抽取出来公共的方法

在Android中,一般来说一个应用会存在几十个页面,并且一个应用一般也会使用一个特定的主题,其中的页面的风格也是一致的,并且页面中的动画效果.页面的切换效果等也应该保持同样的风格,那么就需要一个基类,来完成页面的基础设置,这就是所谓的基类. 界面统一管理原因 当应用中的界面达到一定数量级时,如几十个界面,便于项目管理 提高界面的处理速度 避免由于多Activity导致的问题 界面统一管理的基础 当应用中的界面达到一定数量级时,为了能够让用户更容易操作上手,产品设计时会将界面显示风格进行统一.