android数据存储——远程服务器存储

说明:

    对于联网的APP来说,可能需要通过请求向服务器提交请求数据,也可能需要从服务器端获取数据显示

    如何编码实现客户端与服务器端的交互尼?

        JDK内置的原生API

                HttpUrlConnection

        android内置的包装API

                HttpClient 浏览器

        异步网络请求框架

                Volley

                Xutils


注意:

访问网络,需要申明权限:android.permission.INTERNET

访问网络的程序必须在分线程执行

使用HttpConnection

url:包含请求地址的类:

        URL(path):包含请求路径的构造方法

        openConnection():得到链接对象

HttpURLConnection:代表与服务器连接的类

        setMethod("GET/POST"):设置请求方式

        setConnectTimeout(time):设置连接超时时间,单位为ms

        setReadTimeout(time):设置读取服务器返回数据的时间

        

        connect():链接服务器


        int getResponseCode():得到服务器返回的结果码

        int getContentLength():得到服务器返回数据的长度(字节)

        getOutputStream():返回一个指向服务器端的数据输出流

        getInputStream():返回一个从服务器端返回的数据输入流


GET 请求方式:

/**
	 * httpconnection发送GET请求
	 */
	public void httpConnectionGet(View v){
		//1、显示ProgressDialog
		final ProgressDialog dialog=ProgressDialog.show(this, null, "数据请求中...");
		//2、启动分线程
		new Thread(){
			//3、在分线程中,发送请求,得到响应数据
			public void run() {
				//1).得到path,并带上参数name=Tom
				//String path=key.getText().toString()+"?id=1";
				
				try {
					//2).创建URL对象
					URL url=new URL("http://192.168.1.33:8089/yabushan/userInfo/showUser?id=1");
					//3).打开链接,得到httpURLConnection对象
						HttpURLConnection connection=(HttpURLConnection) url.openConnection();
						//4).设置请求方式,链接超时,读取数据超时
						connection.setRequestMethod("GET");
						connection.setConnectTimeout(5000);
						connection.setReadTimeout(6000);
						//5).链接服务器
						connection.connect();
						//6).发送请求,得到响应数据
							//得到响应码,必须是200才读取
							//得到InputStream,并读取成string
						InputStream is=connection.getInputStream();
						ByteArrayOutputStream baos=new ByteArrayOutputStream();
						byte[] buffer=new byte[1024];
						int len=-1;
						while((len=is.read(buffer))!=-1){
							baos.write(buffer, 0, len);
						}
						final String result=baos.toString();
						baos.close();
						is.close();
						//4、在主线程中,显示得到的结果,移除dialog
						runOnUiThread(new Runnable() {
							@Override
							public void run() {
								value.setText(result);
								dialog.dismiss();
							}
						});
					//7、断开连接
						connection.disconnect();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			};
			
		}.start();
	}

POST请求方式:

/**
	 * 使用httpconnection发送POST请求
	 */
	public void httpConnectionPost(View v ){
		//1.显示progressDialog
		final ProgressDialog dialog=ProgressDialog.show(this, null, "正在加载中...");
		//2.启动分线程
		new Thread(new Runnable() {
			@Override
			public void run() {
				//3.在分线程发送请求,得到响应数据
				try {
					//1).得到path
					String path=key.getText().toString();
					//2).创建URL对象
					//URL url=new URL(path);
					URL url=new URL("http://192.168.1.33:8089/yabushan/userInfo/showUser");
					//3).打开连接
					HttpURLConnection connection=(HttpURLConnection) url.openConnection();
					//4).设置请求方式,链接超时,读取数据超时
					connection.setRequestMethod("POST");
					connection.setConnectTimeout(5000);
					connection.setReadTimeout(5000);
					//5).链接服务器
					connection.connect();
					//6.发送请求得到响应数据
						//的带输出流,写请求体:name=Tom
					OutputStream os=connection.getOutputStream();
					String data="id=1";
					os.write(data.getBytes("utf-8"));
						//得到响应码,必须是200才读取
					int responseCode=connection.getResponseCode();
					if(responseCode==200){
						//得到ImputStream,并读取成String
						InputStream is=connection.getInputStream();
						ByteArrayOutputStream baos=new ByteArrayOutputStream();
						byte[] buffer=new byte[1024];
						int len=-1;
						while((len=is.read(buffer))!=-1){
							baos.write(buffer, 0, len);
						}
						final String result=baos.toString();
						//在主线程,显示得到的结果,移除dialog
						runOnUiThread(new Runnable() {
							@Override
							public void run() {
								value.setText(result);
								dialog.dismiss();
								
							}
						});
					}
					os.close();
					//7.断开连接
					connection.disconnect();
				} catch (Exception e) {
					// TODO: handle exception
				}
			}
		}).start();

    

使用HttpClient

203046_UI31_2482052.jpg

203048_3FUt_2482052.jpg


GET请求:

/**
	 * 使用httpclient发送get请求
	 * 
	 */
	public void httpClientGet(View v ){
		//1.显示progressDialog
		final ProgressDialog dialog = ProgressDialog.show(this, null, "正在请求中。。。");
		
		//2.启动分线程
		new Thread(){
			//3.在分线程中,发送请求,得到响应数据
			@SuppressWarnings("deprecation")
			public void run() {
				try {
					//3-1.得到path,并带上参数name=Tom1&age=11
					String pathString ="http://192.168.1.9:8089/yabushan/userInfo/showUser?id=1";
					
					//3-2.创建Client对象
					org.apache.http.client.HttpClient httpClient=new DefaultHttpClient();
					//3-3.设置超时
					HttpParams params = httpClient.getParams();
					HttpConnectionParams.setConnectionTimeout(params, 5000);
					HttpConnectionParams.setSoTimeout(params, 5000);
					
					//3-4.创建请求对象
					HttpGet request = new HttpGet(pathString);
			
					//3-5.执行请求对象,得到响应对象
					HttpResponse response = httpClient.execute(request);
					int statusCode = response.getStatusLine().getStatusCode();
					if(statusCode==200){
						//3-6.得到响应体文本
						HttpEntity entity = response.getEntity();
						final String result=EntityUtils.toString(entity);
						//4.要在主线程,显示数据,移除dialog
						runOnUiThread(new Runnable() {
							
							@Override
							public void run() {
								value.setText(result);
								dialog.dismiss();
								
							}
						});
					}
				
			
					//3-7.断开连接
					httpClient.getConnectionManager().shutdown();
					
				} catch (Exception e) {
					e.printStackTrace();
					//如果出了异常,要移除dialog
					dialog.dismiss();
				}
			};
			
			
		}.start();
		
				
	}

POST请求:

/**
	 * 使用httpclient发送post请求
	 */
	public void httpClientPost(View v){
		
		//1.显示progressDialog
		final ProgressDialog dialog = ProgressDialog.show(this, null, "正在请求中。。。");
		//2.启动分线程
		new Thread(){
			//3.在分线程,发送请求,得到响应数据
			public void run() {
				try {
					//3-1.得到path
					String path="http://192.168.1.9:8089/yabushan/userInfo/showUser";
					//3-2.创建httpclient对象
					HttpClient httpClient=new DefaultHttpClient();
					//3-3.设置超时
					HttpParams params =httpClient.getParams();
					HttpConnectionParams.setConnectionTimeout(params, 5000);
					HttpConnectionParams.setSoTimeout(params, 5000);
					//4.创建请求对象
					HttpPost request=new HttpPost(path);
					//设置请求体
					List<BasicNameValuePair> parameters =new ArrayList<BasicNameValuePair>();
					//parameters.add(new BasicNameValuePair("name", "Tom4"));
					//parameters.add(new BasicNameValuePair("age", "14"));
					parameters.add(new BasicNameValuePair("id", "1"));
					HttpEntity entity = new UrlEncodedFormEntity(parameters);
					request.setEntity(entity);
					
					//5.执行请求对象,得到响应对象
					HttpResponse response = httpClient.execute(request);
					int statusCode =response.getStatusLine().getStatusCode();
					if(statusCode==200){
						//6.得到响应体文本
						entity = response.getEntity();
						final String result = EntityUtils.toString(entity);
						//7.主线程,显示数据,移除dialog
						runOnUiThread(new Runnable() {
							
							@Override
							public void run() {
								value.setText(result);
								dialog.dismiss();
								
							}
						});
					}
					//8.断开连接
					httpClient.getConnectionManager().shutdown();
					
				} catch (Exception e) {
					e.printStackTrace();
					dialog.dismiss();
				}
				
			};
		}.start();
	}

使用volley请求

215401_2MQN_2482052.jpg

get请求:

/**
	 * 使用volley发送get请求
	 * 
	 */
	public void vo_get(View v){
		
		//1.创建请求队列对象(一次)
		final ProgressDialog dialog = ProgressDialog.show(this, null, "正在请求中");
		//2.创建请求对象StringRequest
		String path = "http://localhost:8089/yabushan/userInfo/showUser?id=1";
		StringRequest request = new StringRequest(path, new Listener<String>() {
		@Override
		public void onResponse(String response) {//在主线程执行
			value.setText(response);
			dialog.dismiss();
			
			
		}
		}, null);
		
		//3.将请求添加到队列中
		queue.add(request);
		
	}

post请求:

/**
	 * 使用valley发送post请求
	 */
	public void vo_post(View v){
		final ProgressDialog dialog= ProgressDialog.show(this, null, "正在请求中。。。");
		
		//创建请求对象StringRequest
		String pathString ="http://localhost:8089/yabushan/userInfo/showUser";
		StringRequest request = new StringRequest(pathString, new Listener<String>() {

			@Override
			public void onResponse(String response) {
				value.setText(response);
				dialog.dismiss();
				
			}
		}, null){
			//重写此方法返回参数的map作为请求体
			@Override
			protected Map<String, String> getParams() throws AuthFailureError {
				Map<String, String> map = new HashMap<String, String>();
				map.put("id", "1");
				return map;
			}
		};
		//将请求添加到队列中
		queue.add(request);
		
		
		
		
		
		
		
		
	}


转载于:https://my.oschina.net/yabushan/blog/644201

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值