Android中的Http的几种get的写法

原创
2016/05/09 22:54
阅读数 28
 面向过程的写法:
 public void gogetImage(View v){
    	
	path = ed_path.getText().toString().trim();
    	if(TextUtils.isEmpty(path)){
    		Toast.makeText(this, "路径有错误...", 0).show();
    		return;
    	}
    	// 连接网络的api  URL类 
    	try {
			URL url = new URL(path);
			
			// http://www.itheima.com/images_new/logo.jpg --由于这里 使用的 是 http协议去                             获得连接, 所以获得的是 
			// HttpURLConnection 的一个 实例 
			
			// ftp://www.itheima.com/images_new/logo.jpg
			// samba://www.itheima.com/images_new/logo.jpg
			// ssh://www.itheima.com/images_new/logo.jpg
			
			//建立一个 连接 --- Connection 对象
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			
			//设置请求的方式
			conn.setRequestMethod("GET");
			
			// 获得 服务器 返回的 状态吗 , 根据 状态码 去判断 是否 成功 
			int code = conn.getResponseCode();
			
			// 200 ,  404 ,500, 302, 304 ..
			
			if(code==200){
				
				//进来 则表示 成功的处理的 请求, 返回了 数据
				
				// 获得返回的图片的 流数据
				InputStream in = conn.getInputStream();
				
				//如果去解析呢 ???  --如何解析成一个 图片显示 
				
				// 这个事儿经常要做 ,谷歌 工程师 已经帮咱们提供好了现成 的类, 可以将一个                                     流数据转换为 一个图片
				
				//这已经是图片了
				Bitmap bitmap = BitmapFactory.decodeStream(in);
				
				iv.setImageBitmap(bitmap);
				in.close();
			}
			

		
面向对象的写法:
    	public void login(View v) {

		//获得 QQ号码和 密码 , 然后登录
		final String number = ed_number.getText().toString().trim();
		final String pwd = ed_pwd.getText().toString().trim();
		
		if(TextUtils.isEmpty(number)||TextUtils.isEmpty(pwd)){
			Toast.makeText(this, "号码或者密码不能为空", 0).show();
			return;
		}
		
		//如果在 发送数据的过程中, 传输了中文数据, 那么是需要进行url 编码的, 否则 带不过去
		// http://192.168.1.100:8080/web_login/login?number=%E5%93%88%E5%93%88&pwd=520itheima
		// http://192.168.1.100:8080/web_login/login?number=5201314&pwd=520itheima
		
		
		//走到这里 , 则说明 qq号码和密码 都输入了 ,然后 需要去连接 网络 
		new Thread(){
			
			public void run() {
				
				try {
					
					String path = "http://192.168.1.100:8080/web_login/login?";
					
					path = path+"number="+URLEncoder.encode(number, "UTF-8")+"&p                                            wd="+URLEncoder.encode(pwd, "UTF-8");
					//http://192.168.1.100:8080/web_login/login?number=123&pwd=4                                                56
					System.out.println(path);
					
					
					
					
					//面向对象 
					
					
					
					//客户端  浏览器
					HttpClient client = new DefaultHttpClient();
					//get 方式 请求的必要的参数
					HttpGet get = new HttpGet(path);
					//   http://192.168.1.100:8080/web_login/login
					//收到的 来自于服务器端的响应的 数据
					HttpResponse response = client.execute(get);
					//http 的相应 分为 响应行, 响应头, 响应体 
					
					
					
					// HTTP/1.1 200 OK
					int code = response.getStatusLine().getStatusCode();
					
					if(code==200){
						
						InputStream in = response.getEntity().getContent();
						
						String data2 = StreamTool.decodeStream(in);
						
						Message msg = Message.obtain();
						msg.what=SUCCESS;
						msg.obj = data2;
						mHandler.sendMessage(msg);
					}
					
				} catch (Exception e) {
					e.printStackTrace();
					Message msg = Message.obtain();
					msg.what=ERROR;
					mHandler.sendMessage(msg);
				}
				
			};
		}.start();
		
		
	}

}




面向对象的写法:
    这种写法是最吊的     访问网络不用我们创建子线程了  直接写在UI线程中
    它内部的实现其实还是使用handler只不过他帮我们封装好了   让我们用的比较爽而已
public void login(View v) {

		// 获得 QQ号码和 密码 , 然后登录
		final String number = ed_number.getText().toString().trim();
		final String pwd = ed_pwd.getText().toString().trim();

		if (TextUtils.isEmpty(number) || TextUtils.isEmpty(pwd)) {
			Toast.makeText(this, "号码或者密码不能为空", 0).show();
			return;
		}

	//	String path = "http://192.168.1.100:8080/web_login/login?number="+number+"&pwd="+pwd;
		String path="http://www.baidu.com";
		AsyncHttpClient client = new AsyncHttpClient();
		
		//封装 了 api , 使用到了handler 去 处理了 这些事儿 ...
		
		client.get(path, new AsyncHttpResponseHandler() {
			
			//请求成功的时候  会被调用的
			@Override
			public void onSuccess(int statusCode, Header[] headers,
					byte[] responseBody) {
//				System.out.println(new String(responseBody));
				tv_status.setText(new String(responseBody));
			}

			//请求 失败 的时候  会被调用的
			@Override
			public void onFailure(int statusCode, Header[] headers,
					byte[] responseBody, Throwable error) {
				error.printStackTrace(System.out);
				Toast.makeText(MainActivity.this, "对不起, 俺错误了...", 0).show();
			}
		});

	}



展开阅读全文
打赏
2
0 收藏
分享

作者的其它热门文章

加载中
更多评论
打赏
0 评论
0 收藏
2
分享
返回顶部
顶部