您的位置:首页 > 理论基础 > 计算机网络

android开发--HttpUrlConnection

2016-04-04 15:04 393 查看
简单实现用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请求

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: