简单实现用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请求