android开发--HttpUrlConnection
2016-04-04 15:04
393 查看
简单实现用get和post方法访问本地服务器
1.androidUI布局activity_main.xml:
显示如下:
当点击”get” button时,向服务器发出get请求,
2个EditText(“输入姓名”,”输入年龄”)用来当发送post请求时发送给服务器的数据
“post”button用来发送post请求
textview用来显示从服务器发送回来的数据
MainActivity.java代码:
记得在manifest.xml中 给予网络访问权限
服务器端(servlet):由于处理json数据,需要引入json.jar包哦
“`
package com.min.servlet;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONException;
import org.json.JSONObject;
public class MyServlet extends HttpServlet {
}
效果图:get请求
post请求
1.androidUI布局activity_main.xml:
这里写代码片<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.min.httpurlconnection.MainActivity" > <Button android:id="@+id/btn_get" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="20dp" android:text="get" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:id="@+id/et_name" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:hint="输入姓名" /> <EditText android:id="@+id/et_age" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:hint="输入年龄" /> </LinearLayout> <Button android:id="@+id/btn_post" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="20dp" android:text="post" /> <TextView android:text="ready..." android:id="@+id/tv" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
显示如下:
当点击”get” button时,向服务器发出get请求,
2个EditText(“输入姓名”,”输入年龄”)用来当发送post请求时发送给服务器的数据
“post”button用来发送post请求
textview用来显示从服务器发送回来的数据
MainActivity.java代码:
package com.min.httpurlconnection; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends Activity { private Button btn_get; private Button btn_post; private EditText et_name; private EditText et_age; private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化控件 init(); // btn_get btn_get.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { getHttp(); } }); // btn_post btn_post.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { postHttp(); } }); } // get请求 protected void getHttp() { // 异步处理 new AsyncTask<String, Void, String>() { @Override protected void onPostExecute(String result) { // 异步访问完成后查询到的数据显示在主UI线程中的textview中 tv.setText(result); super.onPostExecute(result); } @Override protected String doInBackground(String... params) { try { // URL url = new URL(params[0]); HttpURLConnection connection = (HttpURLConnection) url .openConnection(); // 输入流,用于读取服务器的数据 BufferedReader br = new BufferedReader( new InputStreamReader(connection.getInputStream(), "UTF-8")); // 用stringbuffer对象来保存数据 StringBuffer sb = new StringBuffer(); String line = null; while ((line = br.readLine()) != null) { sb.append(line); } br.close(); return sb.toString(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } // 访问的服务器地址信息 }.execute("http://10.0.3.2:8080/MyServer/MyServlet"); } // post请求 protected void postHttp() { new AsyncTask<String, Void, String>() { @Override protected void onPostExecute(String result) { tv.setText(result); super.onPostExecute(result); } @Override protected String doInBackground(String... params) { try { URL url = new URL(params[0]); HttpURLConnection connection = (HttpURLConnection) url .openConnection(); // 设置参数 connection.setDoOutput(true); connection.setDoInput(true); connection.setDefaultUseCaches(false); connection.setRequestMethod("POST"); // 当既有输入流和输出流时,先写(输出流)后读(输入流) // 1.写数据到服务器 // 输出流创建(写) BufferedWriter bw = new BufferedWriter( new OutputStreamWriter( connection.getOutputStream(), "UTF-8")); // 建jsonobject对象封装上传数据 JSONObject jObject = new JSONObject(); jObject.put("name", et_name.getText().toString()); jObject.put("age", et_age.getText().toString()); bw.write(jObject.toString()); bw.flush(); bw.close(); // 2.从服务器读取数据(输入流) // 必须在写操作后创建输入流对象 BufferedReader br = new BufferedReader( new InputStreamReader(connection.getInputStream(), "UTF-8")); StringBuffer sb = new StringBuffer(); String line = null; while ((line = br.readLine()) != null) { sb.append(line); } br.close(); return sb.toString(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } return null; } }.execute("http://10.0.3.2:8080/MyServer/MyServlet"); } private void init() { btn_get = (Button) findViewById(R.id.btn_get); btn_post = (Button) findViewById(R.id.btn_post); et_name = (EditText) findViewById(R.id.et_name); et_age = (EditText) findViewById(R.id.et_age); tv = (TextView) findViewById(R.id.tv); } }
记得在manifest.xml中 给予网络访问权限
<uses-permission android:name="android.permission.INTERNET"/>
服务器端(servlet):由于处理json数据,需要引入json.jar包哦
“`
package com.min.servlet;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONException;
import org.json.JSONObject;
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("-----get-------------"); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); out.println("你发送了get请求到服务器"); out.flush(); out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("--------------------post-----------------"); response.setCharacterEncoding("UTF-8"); BufferedReader br = new BufferedReader(new InputStreamReader( request.getInputStream(), "UTF-8")); StringBuffer sb = new StringBuffer(); String line = null; while ((line = br.readLine()) != null) { sb.append(line + "\n"); } try { // 解析传来的json数据 JSONObject jObject = new JSONObject(sb.toString()); String name = jObject.getString("name"); String age = jObject.getString("age"); System.out.println("name=" + name); System.out.println("age=" + age); } catch (JSONException e) { e.printStackTrace(); } br.close(); PrintWriter out = response.getWriter(); out.println(sb); out.flush(); out.close(); }
}
效果图:get请求
post请求
相关文章推荐
- “代理服务器拒绝连接“问题
- 手游后台PVP系统网络同步方案总结
- Java安全(加密、摘要、签名、证书、SSL、HTTPS)
- Twsited异步网络框架
- RNN-RBM for music composition 网络架构及程序解读
- 或许是 Nginx 上配置 HTTP2 最实在的教程了
- 循环神经网络(RNN, Recurrent Neural Networks)介绍
- TCP/IP协议之IP协议详解
- iOS开发网络篇-NSURLSession介绍
- TCP/IP协议---ICMP协议及ping、traceroute
- 网络流二十四题之一 —— 飞行员配对方案问题(AIR)
- HTTP
- Linux下抓包工具tcpdump使用
- 利用浏览器缓存抓取网络资源:【炉石传说】所有卡牌png图片地址
- Android网络编程(三)Volley用法全解析
- Linux tcpdump命令详解
- 像社交网络一样看待遗传学:一位数据科学家的观点Genetics as a Social Network - A Data Scientist's Perspective
- Linux系统tcpdump抓包保存cap文件
- 在AWS上使用GPU实现分布式神经网络Distributed Neural Networks with GPUs in the AWS Cloud
- 深入探究递归神经网络RNN A Deep Dive into Recurrent Neural Nets