Advertisement

Android之URL访问网络

阅读量:

以下是一段示例代码段。以下是一段示例代码段。这段代码采用三种不同的网络交互方式。具体来说包括直接使用URL对象以及通过NetworkingURLConnection实现GET和POST操作。此外还提供了专门用于处理NETWORKINGURLEFFECTIVE的操作类。

这个程序的布局界面相对简洁。它包含三个按钮以及一个标签。如图所示,则它们各自负责发送不同类型的请求,并用于展示来自服务器的消息。

Activity代码:

复制代码
 package com.example.hellourl;

    
  
    
 import java.io.BufferedReader;
    
 import java.io.IOException;
    
 import java.io.InputStream;
    
 import java.io.InputStreamReader;
    
 import java.net.MalformedURLException;
    
 import java.net.URL;
    
  
    
 import com.example.web.GetPostUtil;
    
  
    
 import android.annotation.SuppressLint;
    
 import android.app.Activity;
    
 import android.os.Bundle;
    
 import android.os.Handler;
    
 import android.os.Message;
    
 import android.view.Menu;
    
 import android.view.View;
    
 import android.view.View.OnClickListener;
    
 import android.widget.Button;
    
 import android.widget.TextView;
    
  
    
 @SuppressLint("HandlerLeak")
    
 public class MainActivity extends Activity {
    
  
    
 	//页面组件
    
 	TextView txt;
    
 	//URL按钮
    
 	Button btn;
    
 	//发送GET请求按钮
    
 	Button btnGet;
    
 	//发送POST请求按钮
    
 	Button btnPost;
    
 	
    
 	//服务器返回的消息
    
 	String message = "";
    
 	//服务器地址
    
 	String urlStr = "http://192.168.9.160:8080/WebTest2/servlet/ConnServlet?name='zz'&pwd='234'";
    
 	String getUrlStr = "http://192.168.9.160:8080/WebTest2/servlet/ConnServlet";
    
 	String postUrlStr = "http://192.168.9.160:8080/WebTest2/servlet/ConnServlet";
    
 	Handler hander = new Handler(){
    
 		@Override
    
 		public void handleMessage(Message msg){
    
 			if(msg.what == 0x123){
    
 				txt.setText(message);
    
 			}
    
 		}
    
 	};
    
 	
    
 	@Override
    
 	protected void onCreate(Bundle savedInstanceState) {
    
 		super.onCreate(savedInstanceState);
    
 		setContentView(R.layout.activity_main);
    
 		//获取页面按钮
    
 		btn = (Button) findViewById(R.id.button1);
    
 		btnGet = (Button) findViewById(R.id.btnGet);
    
 		btnPost = (Button) findViewById(R.id.btnPost);
    
 		
    
 		//获取页面显示服务器返回消息的标签
    
 		txt = (TextView) findViewById(R.id.textView1);
    
 		btn.setOnClickListener(new OnClickListener() {
    
 			
    
 			@Override
    
 			public void onClick(View arg0) {
    
 				new Thread(){
    
 					public void run(){
    
 						try {
    
 							//访问服务器
    
 							//创建URL对象
    
 							URL url = new URL(urlStr);
    
 							//打开URL对应的资源输入流
    
 							InputStream in = url.openStream();
    
 							
    
 							BufferedReader br = new BufferedReader(new InputStreamReader(in));
    
 							message = new String(br.readLine().getBytes(),"UTF-8");
    
 							//发送消息,通知UI组件显示服务器返回消息
    
 							hander.sendEmptyMessage(0x123);
    
 							br.close();
    
 						} catch (MalformedURLException e) {
    
 							e.printStackTrace();
    
 						} catch (IOException e) {
    
 							e.printStackTrace();
    
 						}
    
 					}
    
 				}.start();
    
 			}
    
 		});
    
 		btnGet.setOnClickListener(new OnClickListener() {
    
 			
    
 			@Override
    
 			public void onClick(View arg0) {
    
 				new Thread(){
    
 					public void run(){
    
 						message = GetPostUtil.sendGet(getUrlStr, 
    
 								"name='lili'&pwd='123'");
    
 						//发送消息,通知UI组件显示服务器返回消息
    
 						hander.sendEmptyMessage(0x123);
    
 					}
    
 				}.start();
    
 			}
    
 		});
    
 		btnPost.setOnClickListener(new OnClickListener() {
    
 			
    
 			@Override
    
 			public void onClick(View arg0) {
    
 				new Thread(){
    
 					public void run(){
    
 						message = GetPostUtil.sendPost(postUrlStr, 
    
 								"name='xiaoming'&pwd='321'");
    
 						//发送消息,通知UI组件显示服务器返回消息
    
 						hander.sendEmptyMessage(0x123);
    
 					}
    
 				}.start();
    
 			}
    
 		});
    
 	}
    
  
    
 	@Override
    
 	public boolean onCreateOptionsMenu(Menu menu) {
    
 		getMenuInflater().inflate(R.menu.main, menu);
    
 		return true;
    
 	}
    
  
    
 }

URLConnection工具类:

复制代码
 package com.example.web;

    
  
    
 import java.io.BufferedReader;
    
 import java.io.IOException;
    
 import java.io.InputStreamReader;
    
 import java.io.PrintWriter;
    
 import java.net.URL;
    
 import java.net.URLConnection;
    
 import java.util.List;
    
 import java.util.Map;
    
  
    
 public class GetPostUtil {
    
  
    
 	/** * 向指定URL发送GET方法的请求
    
 	 * @param url 被请求的url
    
 	 * @param param 请求参数  格式:name1=value1&name2=value2
    
 	 * @return 远程资源的响应信息
    
 	 */
    
 	public static String  sendGet(String url,String param){
    
 		String result = "";
    
 		BufferedReader in = null;
    
 		
    
 		try {
    
 			String urlStr = url + "?" +param;
    
 			URL urlObj = new URL(urlStr);
    
 			URLConnection conn = urlObj.openConnection();
    
 			//设置通用的请求属性
    
 			conn.setRequestProperty("Accept-Language", "zh-cn");
    
 			conn.setRequestProperty("Charset", "utf-8");
    
 			//建立实际的连接
    
 			conn.connect();
    
 			//获取所有响应头字段
    
 			Map<String,List<String>> map = conn.getHeaderFields();
    
 			for(String key:map.keySet()){
    
 				System.out.println("服务器返回头信息"+key+":"+map.get(key));
    
 			}
    
 			//定义BufferedReader输入流来读取URL的响应
    
 			in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    
 			String line;
    
 			while((line = in.readLine())!=null){
    
 				result += "\n" + line;
    
 			}
    
 			
    
 		} catch (Exception e) {
    
 			System.out.println("发送GET请求出现异常\n"+e);
    
 		}finally{
    
 			try{
    
 				if(in!=null){
    
 					in.close();
    
 				}
    
 			}catch(IOException e){
    
 				e.printStackTrace();
    
 			}
    
 		}
    
 		
    
 		return result;
    
 	}
    
  
    
 	/** * 向指定URL发送POST方法的请求
    
 	 * @param url 被请求的url
    
 	 * @param param 请求参数  格式:name1=value1&name2=value2
    
 	 * @return 远程资源的响应信息
    
 	 */
    
 	public static String  sendPost(String url,String param){
    
 		String result = "";
    
 		BufferedReader in = null;
    
 		PrintWriter out = null;
    
 		try {
    
 			URL urlObj = new URL(url);
    
 			//打开和URL之间的连接
    
 			URLConnection conn = urlObj.openConnection();
    
 			//设置通用的请求属性
    
 			conn.setRequestProperty("Charset", "utf-8");
    
 			//发送POST请求必须设置如下两项
    
 			conn.setDoOutput(true);
    
 			conn.setDoInput(true);
    
 			//获取URLConnection对应的输出流
    
 			out = new PrintWriter(conn.getOutputStream());
    
 			//发送请求参数
    
 			out.print(param);
    
 			out.flush();
    
 			//定义BufferedReader输入流来读取URL的响应
    
 			in = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
    
 			String line;
    
 			while((line = in.readLine())!=null){
    
 				result += "\n" + line;
    
 			}
    
 			
    
 		} catch (Exception e) {
    
 			System.out.println("发送POST请求出现异常\n"+e);
    
 		}finally{
    
 			try{
    
 				if(out!=null){
    
 					out.close();
    
 				}
    
 				if(in!=null){
    
 					in.close();
    
 				}
    
 			}catch(IOException e){
    
 				e.printStackTrace();
    
 			}
    
 		}
    
 		
    
 		return result;
    
 	}
    
 }

服务器Servlet代码

复制代码
 public void doGet(HttpServletRequest request, HttpServletResponse response)

    
 			throws ServletException, IOException {
    
  
    
 		response.setContentType("text/html");
    
 		response.setCharacterEncoding("utf-8");
    
 		PrintWriter out = response.getWriter();
    
 		request.setCharacterEncoding("utf-8");
    
 		String name = request.getParameter("name");
    
 		String pwd =  request.getParameter("pwd");
    
 		System.out.println(name+":"+pwd);
    
 		request.setAttribute("name", "姓名:"+name);
    
 		request.setAttribute("pwd", "密码"+pwd);
    
 		out.println(name+"GET方式web访问成功");
    
 		out.flush();
    
 		out.close();
    
 	}
    
  
    
 	
    
 	public void doPost(HttpServletRequest request, HttpServletResponse response)
    
 			throws ServletException, IOException {
    
  
    
 		response.setContentType("text/html");
    
 		request.setCharacterEncoding("utf-8");
    
 		response.setCharacterEncoding("utf-8");
    
 		PrintWriter out = response.getWriter();
    
 		String name = request.getParameter("name");
    
 		String pwd = request.getParameter("pwd");
    
 		System.out.println(name+":"+pwd);
    
 		request.setAttribute("name", "姓名:"+name);
    
 		request.setAttribute("pwd", "密码"+pwd);
    
 		out.println(name+"POST方式访问web成功");
    
 		out.flush();
    
 		out.close();
    
 	}

源码下载:<>

全部评论 (0)

还没有任何评论哟~