客户端与服务器端的交流——自己动手写async-http简单版

以前对于 客户端与服务器端总是不太熟悉,借着周末的事件好好的复习吧


骚年雄起吧~~~


还记步骤不?


还记得我上一篇文章    Hanlde消息处理机制的复习——网络图片下载么


上一篇文章我对于网络方面我很少提到,主要是用来复习handle消息机制的 。 安卓是不允许主线程有很多耗时操作的,而对于联网操作必须要放到 次线程的。而次线程请求的数据,而又不能放在次线程更新的,所以要放在主线程更新,所以handler消息机制的出现不是偶然。


具体步骤:

        //1.开启子线程 执行一个http请求在后台执行在子线程执行

        //2.子线程执行完毕后 通知ui界面更新

程序员前期要好好打基础,我们要好好听前辈的话,而到后期代码熟练以后,我要好好的偷懒~

我还记得 最火的开源项目里 第6个 正好是对于 异步+Http的封装,大家可以去github去下载, 如果单单是使用直接考入jar 就行了 


我们先看一个对post 登录的封装吧  很方便  就5行代码



首先

1-2 拿到 登录帐号和密码

3.实例化   AsyncHttpclient (要用别人的东西还是要实例化的)

4.准备好一个url

5.将数据put 进去

6. 然后post 请求   (第一个参数是url,第二参数是 属性你put进来的数据 第三个是 handler  jar自己封装的)

7.然后super 2个方法 也就是成功和失败 。

~~~~~~~~~~~~我是淫荡的分割线~~~~ ~~~ ~~~ 是时候自己写了

第一步 开启子线程 执行一个http请求在后台执行在子线程执行

PS:线程是用来获取数据的,你需要两个参数 一个URL 和handler  联网我们用httpclient 其中还会有一个流转String的一个工具类 然后用handler将数据发送出去

package com.xiaoxin.AsyHttp;


import java.io.InputStream;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.os.Message;

public class AsyncHttpClient {
	public void get(final String path, final MyHandler myhandler) {
		new Thread(new Runnable() {

			@Override
			public void run() {
				HttpClient client = new DefaultHttpClient();

				HttpGet get = new HttpGet(path);
				try {
					HttpResponse response = client.execute(get);
					InputStream is = response.getEntity().getContent();
					String content = StreamTool.readInputStream(is);
					// 执行成功
					Message message=new Message();
					message.what=1;
					message.obj=content;
					myhandler.sendMessage(message);
				} catch (Exception e) {
					// 执行失败
					e.printStackTrace();
					Message message=new Message();
					message.what=2;
					message.obj="请求失败";
					myhandler.sendMessage(message);
				}
			}
		});
	}
}
关于工具类 大家好好手残好哦  StreamTool

package com.xiaoxin.AsyHttp;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;

public class StreamTool {

	public static String readInputStream(InputStream is) {
		try {

			ByteArrayOutputStream out = new ByteArrayOutputStream();
			int length = 0;
			byte[] buffer = new byte[1024];
			if ((length = is.read(buffer)) != -1) {
				out.write(buffer, 0, length);
			}
			is.close();
			byte[] result = out.toByteArray();
			return new String(result);

		} catch (Exception e) {
			// TODO: handle exception
		}
		return "转换失败";
	}

}

三步:联网---》流转str--->handler发送数据 成功发送内容 不成功 发送请求失败


第二步 自定义MyHandler

PS:自定义嘛 先继承Handler 先写两个方法 成功或者失败  因为在 AsyncHttpClient  传来了 内容 所以需要加入一个参数  String content 如果这个类不熟悉的话

同学们需要去复习下 消息机制了

package com.xiaoxin.AsyHttp;

import android.os.Handler;
import android.os.Message;

public class MyHandler extends Handler {
	public void OnFailure(String content) {

	}

	public void OnSuccess(String content) {

	}
	@Override
	public void handleMessage(Message msg) {
		String content=(String) msg.obj;
		super.handleMessage(msg);
		switch (msg.what) {
		case 1:
			OnSuccess(content);
			break;
		case 2:
			OnFailure(content);
			break;

		default:
			break;
		}
	}
}

第三步 开始用 我们定义好的类啦

你会发现 我们现在所写的格式 和 开源框架是那么的像

package com.xiaoxin.AsyHttp;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;


public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }
    public void btn(View view){
    	//1.开启子线程 执行一个http请求在后台执行在子线程执行
    	String path="";
    	AsyncHttpClient asyncHttpClient=new AsyncHttpClient();
    	asyncHttpClient.get(path, new	 MyHandler(){

			@Override
			public void OnFailure(String content) {
				Toast.makeText(MainActivity.this, content, 1).show();
				super.OnFailure(content);
			}

			@Override
			public void OnSuccess(String content) {
				Toast.makeText(MainActivity.this, content, 1).show();
				super.OnSuccess(content);
			}
    		
    	});
    	//2.子线程执行完毕后 通知ui界面更新
    }
}



End-------------

下一篇内容是 用开源框架 上传文件, 其实嘛 很多程序员也不是都去了解 开源框架的,工作中使用开源框架是让你效率提高嘛  






你可能感兴趣的:(开源框架)