HttpURLConnection通信

Http编程两种方式

GET方式:数据附在网址中,好处是速度快,并可设为书签;不足是传输的数据有限,并且不保密
POST方式:数据封装成表单发送,好处是传输的数据量大,保密;不足是速度稍慢,不能设为书签

 

1、在AndroidManifest.xml添加网络权限

<uses-permission android:name="android.permission.INTERNET" />

2、传值方式

1)直接传值

			//直接传值:返回响应的结果
			String name="小王";
			try {
				name = URLEncoder.encode(name, "utf-8");
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			String pwd="123";
			path="http://192.168.31.145:8080/MyHttpServer/MyServlet"+"?username="+name+"&userpwd="+pwd;

2)JSON传值

			String name="小王";
			String pwd="123";
			User user=new User(name, pwd);
			Gson gson=new Gson();
			String jsonUser=gson.toJson(user);
			Log.d("lhm", jsonUser);
			try {
				jsonUser = URLEncoder.encode(jsonUser, "utf-8");
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			Log.d("lhm","换码后"+ jsonUser);
			path="http://192.168.31.145:8080/MyHttpServer/MyServlet"+"?user="+jsonUser;
			new Thread(){
				public void run() {
					String str=HttpUtil.getMethod(path);
					Message message=Message.obtain();
					message.arg1=1;
					message.obj=str;
					handler.sendMessage(message);
				};
			}.start();

注意:在调用HttpUtil的getMethod要开启多线程

Handler handler=new Handler(){
		public void handleMessage(android.os.Message msg) {
			if (msg.arg1==1) {
				Toast.makeText(MainActivity.this, "返回的结果是"+msg.obj.toString(), Toast.LENGTH_SHORT).show();
			}
		};
	};

整体代码:

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myhttpclient"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.myhttpclient.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

实体类

package entity;

public class User {
	private String userName;
	private String userPwd;
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getUserPwd() {
		return userPwd;
	}
	public void setUserPwd(String userPwd) {
		this.userPwd = userPwd;
	}
	public User(String userName, String userPwd) {
		super();
		this.userName = userName;
		this.userPwd = userPwd;
	}
	public User() {
		super();
	}
	@Override
	public String toString() {
		return "User [userName=" + userName + ", userPwd=" + userPwd + "]";
	}
	
}

工具类

package com.example.myhttpclient.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import android.util.Log;

public class HttpUtil {
	/**
	 * 采用get方法访问http服务器
	 * @param path http路径
	 * @return
	 */
	public static String getMethod(String path){
		String str="";
		//声明返回结果
		String result="";

			//将访问地址转换成url对象
			URL url;
			try {
				url = new URL(path);
				//打开http连接对象
				HttpURLConnection huc=(HttpURLConnection) url.openConnection();
				//开启连接
				huc.connect();
				//GET和POST必须全部大写,默认GET方法
//				huc.setRequestMethod("GET");
				//设置连接超时时间5秒
				huc.setConnectTimeout(5*1000);
				//设置字符串缓冲流对象
				BufferedReader br=null;
				//实例化缓冲流对象
				br=new BufferedReader(new InputStreamReader(huc.getInputStream()));
				while ((result=br.readLine())!=null) {
					str+=result;
					Log.d("lhm", "result="+result);
					Log.d("lhm", "str="+str);
				}
				//读取完毕后关闭对应的连接
				br.close();
				huc.disconnect();
			} catch (MalformedURLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				Log.d("lhm", "url发生异常");
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				Log.d("lhm", "close发生异常");
			}
			

		return str;
	}
}
package com.example.myhttpclient;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import com.example.myhttpclient.util.HttpUtil;
import com.google.gson.Gson;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
import entity.User;

public class MainActivity extends Activity implements OnClickListener{
	private Button send;
	private String path;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		send=(Button) findViewById(R.id.main_send);
		send.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.main_send:
			/*//直接传值:返回响应的结果
			String name="小王";
			try {
				name = URLEncoder.encode(name, "utf-8");
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			String pwd="123";
			path="http://192.168.31.145:8080/MyHttpServer/MyServlet"+"?username="+name+"&userpwd="+pwd;*/
			String name="小王";
			String pwd="123";
			User user=new User(name, pwd);
			Gson gson=new Gson();
			String jsonUser=gson.toJson(user);
			Log.d("lhm", jsonUser);
			try {
				jsonUser = URLEncoder.encode(jsonUser, "utf-8");
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			Log.d("lhm","换码后"+ jsonUser);
			path="http://192.168.31.145:8080/MyHttpServer/MyServlet"+"?user="+jsonUser;
			new Thread(){
				public void run() {
					String str=HttpUtil.getMethod(path);
					Message message=Message.obtain();
					message.arg1=1;
					message.obj=str;
					handler.sendMessage(message);
				};
			}.start();
			
			break;

		default:
			break;
		}
	}
	Handler handler=new Handler(){
		public void handleMessage(android.os.Message msg) {
			if (msg.arg1==1) {
				Toast.makeText(MainActivity.this, "返回的结果是"+msg.obj.toString(), Toast.LENGTH_SHORT).show();
			}
		};
	};

}

MyEclipse的实体类和Eclipse的实体类相同包名、类名

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.gson.Gson;

import entity.User;

public class MyServlet extends HttpServlet {

	/**
	 * Constructor of the object.
	 */
	public MyServlet() {
		super();
	}

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		request.setCharacterEncoding("UTF-8");
		/*//直接取值
		String name=request.getParameter("username");	
		String name1=new String(name.getBytes("iso-8859-1"), "utf-8");
		String pwd=request.getParameter("userpwd");
		System.out.println(name1+"  "+pwd);
		out.println("username="+name+",userpwd="+pwd);*/
		String jsonUser=request.getParameter("user");
		Gson gson=new Gson();
		User user=gson.fromJson(jsonUser, User.class);
		String name=user.getUserName();
		String name1=new String(name.getBytes("iso-8859-1"), "utf-8");
		String pwd=user.getUserPwd();
		System.out.println(name1+"  "+pwd);
		out.println("username="+name+",userpwd="+pwd);
		out.flush();
		out.close();
	}

	/**
	 * The doPost method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to post.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doPost(request, response);
	}

	/**
	 * Initialization of the servlet. <br>
	 *
	 * @throws ServletException if an error occurs
	 */
	public void init() throws ServletException {
		// Put your code here
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HttpUrlConnection 是 Java 标准库中用于发送 HTTP 请求和处理 HTTP 响应的类。它提供了一种简单的方式来与远程服务器进行通信。您可以使用 HttpUrlConnection 类来建立连接、发送请求、读取响应和处理错误。 以下是使用 HttpUrlConnection 发送 GET 请求的示例代码: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class HttpUrlConnectionExample { public static void main(String[] args) { try { URL url = new URL("http://example.com/api"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); int responseCode = connection.getResponseCode(); System.out.println("Response Code: " + responseCode); BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line; StringBuilder response = new StringBuilder(); while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); System.out.println("Response: " + response.toString()); connection.disconnect(); } catch (Exception e) { e.printStackTrace(); } } } ``` 这个示例中,我们创建了一个 URL 对象来指定要发送请求的目标 URL。然后,我们打开一个 HttpURLConnection 连接并设置请求方法为 GET。发送请求后,我们可以获取响应码、读取响应内容,并在最后关闭连接。 您可以根据需要设置请求头、添加请求参数等。同时,HttpUrlConnection 也支持其他的 HTTP 方法,如 POST、PUT、DELETE 等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值