我们要写一个简单的提交请求:

Layout先写好:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/send_request" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:textColor="#000000" android:textSize="18dp" android:text="发送请求,获取数据"/> <TextView android:id="@+id/txt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18dp" android:visibility="gone" android:textColor="#000000" android:text="变变变"/> <EditText android:id="@+id/account" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入账号..." android:textColor="#000000" android:textSize="18dp"/> <EditText android:id="@+id/password" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入密码..." android:textSize="18dp" android:textColor="#000000"/> <Button android:id="@+id/btn_upload" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="提交" android:textColor="#000000" android:textSize="18dp"/> </LinearLayout>
接着主代码:
package com.example.httptryapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
private Button send_request;
private TextView txt;
private String msg;
private Button btn_upload;
private EditText account;
private EditText password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txt = findViewById(R.id.txt);
btn_upload =findViewById(R.id.btn_upload);
send_request = findViewById(R.id.send_request);
account = findViewById(R.id.account);
password = findViewById(R.id.password);
btn_upload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String input_account = account.getText().toString();
final String input_password = password.getText().toString();
new Thread(){
@Override
public void run() {
super.run();
postInfo(input_account,input_password);
}
}.start();
}
});
send_request.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(){
@Override
public void run() {
super.run();
msg = getRequest();
runOnUiThread(new Runnable() {
@Override
public void run() {
txt.setText(msg);
}
});
}
}.start();
}
});
}
private void postInfo(String account,String password) {
try {
URL url = new URL("http://www.imooc.com/api/okhttp/postmethod");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setConnectTimeout(6000);
//设置允许输出,对于客户端,我们提交参数到服务端,我们是在向外输出内容
conn.setDoOutput(true);
//待提交的内容如何过去呢?我们就需要把待提交的内容,添加到请求正文
//设置提交数据的类型,设置和你提交内容相关的属性
conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
//获取输出流
OutputStream out = conn.getOutputStream();
//写数据
out.write(("username="+account+"&pwd="+password).getBytes());
if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){
InputStream in = conn.getInputStream();
byte[] b = new byte[1024];
int len = 0;
//创建一个缓存流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while ((len = in.read(b))>-1){
baos.write(b);
}
//取出我们能够看懂的东西
String msg = new String(baos.toString());
Log.e("TAG",msg+"======");
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private String getRequest() {
try {
URL url = new URL("http://www.imooc.com/api/teacher?type=3&cid=1&type=3");
//获取一个HttpUrlConnection对象
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//请求方式
conn.setRequestMethod("GET");
//请求时长
conn.setConnectTimeout(6000);
//获取响应码 200:成功 ;404:未请求到指定资源 500:服务器异常
if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){
//获取输入流
InputStream in = conn.getInputStream();
//字节流的内存设置
byte[] b = new byte[1024];
int len = 0;
//缓存流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//循环读取入输入流
while((len=in.read(b))>-1){
//将字节数组里面的内容存入到缓存流
//参数1.待写入的数组 2.起点 3.长度
baos.write(b,0,len);
}
//接着,我们要把数据转成我们能读懂的内容
msg = new String(baos.toString());
Log.e("TAG","msg = "+ msg);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return msg;
}
}接下来,把用户名和密码解析出来,你是不是以为你能解析一个Post?不行哈!我们的解析例子,是随便举一个GET请求的解析例子:
package com.example.httptryapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.EditText;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class SecondActivity extends AppCompatActivity {
private EditText edt_name,edt_password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
edt_name = findViewById(R.id.edt_name);
edt_password = findViewById(R.id.edt_password);
new Thread(){
@Override
public void run() {
super.run();
//直接把数据解析出来
parseByJsonObject();
}
}.start();
}
private void parseByJsonObject() {
new Thread(){
@Override
public void run() {
super.run();
String str = getRequest();
try {
JSONObject jo = new JSONObject(str);
final String message = jo.getString("msg");
runOnUiThread(new Runnable() {
@Override
public void run() {
edt_name.setText(message);
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
}.start();
}
private String getRequest() {
try {
URL url = new URL("http://www.imooc.com/api/teacher?type=3&cid=1&type=3");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(6000);
if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){
InputStream in = conn.getInputStream();
byte[] b = new byte[1024];
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int len = 0;
while ((len = in.read(b))>-1){
baos.write(b,0,len);
}
String msg = baos.toString();
return msg;
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}HTTP的最佳写法,把GET请求提成一个类:
package com.example.httptryapplication.utils;
import android.util.Log;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class HttpUtils {
public static String sendHttpRequest(String address) {
HttpURLConnection connection = null;
try {
URL url = new URL(address);
connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(8000);
connection.setReadTimeout(8000);
connection.setDoOutput(true);
connection.setDoInput(true);
InputStream in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder response = new StringBuilder();
String line;
while((line = reader.readLine())!=null){
response.append(line);
}
return response.toString();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
return e.getMessage();
}finally {
if(connection != null){
connection.disconnect();
}
}
return null;
}
}调用的时候:
String address = "http://baidu.com";
String response = HttpUtils.sendHttpRequest(address);
随时随地看视频