Android使用HTTP协议访问服务器
智能车锁的项目用户端的APP可以使用HTTP方式访问服务器,毕竟放在WEB容器中可能会稳定一点吧...
一、HTTP请求步骤
- 使用路径获取URL对象
- URL对象获取连接对象
- 连接对象设置超时时间、提交方式
- 查询状态码,若为200则访问成功
- 将服务器的返回的数据显示出来
二、APP编程思路
- 放置两个按钮控件,分别用于GET和POST提交数据
- 初始化按钮控件,获取连接对象
- 设置点击事件
- 执行GET或POST连接
- ps:获取连接等耗时操作要在子线程中进行
三、代码
import android.os.Bundle; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import android.app.Activity; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity implements OnClickListener { //声明控件 Button getButton; Button postButton; //声明路径 String Path; //声明连接对象 URL url; HttpURLConnection getConnect;//get方式的连接对象 HttpURLConnection postConnect;//post方式的连接对象 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init();//初始化控件、连接 } /** * 这是一个初始化控件、连接的方法 */ private void init(){ getButton = (Button) findViewById(R.id.GET); postButton = (Button) findViewById(R.id.POST); getButton.setOnClickListener(this); postButton.setOnClickListener(this); Path = "https://www.baidu.com/"; try {url = new URL(Path);} catch (Exception e) {System.out.println(e.getMessage());} } /** * 重写点击事件 */ @Override public void onClick(View v) { if(v.equals(getButton)){//get按钮点击 get(); }else if(v.equals(postButton)){//post方式点击 post(); } } /** * 这是一个get方式访问服务器的方法 */ private void get(){ new Thread(new Runnable() { public void run() { try { getConnect = (HttpURLConnection) url.openConnection();//获得连接对象 getConnect.setConnectTimeout(5000);//设置超时时间 getConnect.setRequestMethod("GET");//设置访问方式 //若要get方式传输数据,将path改为 Path = "https://www.baidu.com/?name=jingmo&age=18"; //判断响应码并获取返回信息 if(getConnect.getResponseCode()==200){ InputStream in = getConnect.getInputStream(); System.out.println(inputStream2String(in)); } } catch (IOException e) { System.out.println(e.getMessage()); } } }).start(); } /** * 这是一个post方式访问服务器的方法 */ private void post(){ new Thread(new Runnable() { @Override public void run() { try { postConnect = (HttpURLConnection) url.openConnection();//获取连接对象 postConnect.setConnectTimeout(5000);//设置超时时间 postConnect.setRequestMethod("POST");//设置访问方式 //POST方式访问服务器传输数据是以流的方式传输的 postConnect.getOutputStream().write("我是数据".getBytes()); //判断响应码并获取返回信息 if(postConnect.getResponseCode()==200){ InputStream in = postConnect.getInputStream(); System.out.println(inputStream2String(in)); } } catch (IOException e) { System.out.println(e.getMessage()); } } }).start(); } /** * 这是一个将输入流转为String类型的方法 * @param in 输入流 * @return 转换结果String */ private String inputStream2String (InputStream in) throws IOException { StringBuffer out = new StringBuffer(); byte[] b = new byte[4096]; for(int n;(n = in.read(b))!=-1;) { out.append(new String(b, 0, n)); } return out.toString(); } }
小白一枚,有什么纰漏还请大神们指教。