客户端请求服务端,服务端响应客户端
2、HTTP协议 定义: HTTP(Hypertext Transfer Protocol)协议, 既超文本传输协议,是建立在TCP/IP协议基础上的网络应用层协议。默认端口是80,使用的版本是HTTP/1.1, 它基于客户/服务器模式(Client/Server), 客户端主动发出HTTP请求, 服务器接收HTTP请求, 返回HTTP响应结果。 请求: 响应 工作原理 1、客户端连接到服务器2、发送HTTP请求3、服务器接收请求并返回HTTP响应4、释放连接5、客户端解析响应内容 3、URL解析百度一下,你就知道https://www.baidu.com/
什么是URL: URL是统一资源定位符, 在互联网上每一个资源都有一个唯一的URL,我们俗称网址,URL中所包含的信息就是告诉我们文件位置 怎么处理它。URL由4部分组成: 协议、主机、端口、路径一般语法格式: 协议://主机名称[:端口]/路径/[:参数][?查询字符串][#片段] 二、网络请求 1、网络权限申请(9.0前)例子:
3、get请求(网络请求不能放在主线程中) HttpURLConnection步骤 实例化一个URL对象获取HttpURLConnection实例设置和请求相关的属性获取响应码判断响应码并获取响应数据例子:
activity_main.xml
MainActivity.java
package com.example.internetproject;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
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 MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void myclick(View v){
switch (v.getId()){
case R.id.get:
new Thread(){
@Override
public void run() {
super.run();
get();
}
}.start();
break;
}
}
private void get() {
try {
//HttpURLConnection
//1、实例化一个URL对象
URL url = new URL("http://www.baidu.com");
//2、获取HttpURLConnection实例
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//3、设置和请求相关的属性
// 请求方式
conn.setRequestMethod("GET");
// 请求超时时长
conn.setConnectTimeout(10000);
//4、获取响应码 默认先发送请求后获取响应码 200成功 404未找到指定资源 500服务器错误
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
//5、判断响应码并获取响应数据
//获取响应输入流
InputStream in = conn.getInputStream();
//在循环中读取输入流
byte[] b = new byte[1024];
// in.read(b); //该方法返回值是int类型数据,代表的是实际的数据长度
int len = 0;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while((len = in.read(b)) > -1){
//将字节数组里面的内容存/写入缓存流
//参数1:待写入的数组
//参数2:起点
//参数3:长度
baos.write(b, 0, len);
}
String msg = new String(baos.toString());
Log.e("TAG", msg+"========");
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
结果:
4、post请求例子:
activity_main.xml
MainActivity.java
package com.example.internetproject;
import androidx.appcompat.app.AppCompatActivity;
import android.icu.util.Output;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
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;
import java.nio.charset.StandardCharsets;
public class MainActivity extends AppCompatActivity {
private EditText accEdt, pwdEdt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
accEdt = findViewById(R.id.account);
pwdEdt = findViewById(R.id.pwd);
}
public void myclick(View v){
switch (v.getId()){
case R.id.post:
String account = accEdt.getText().toString();
String password = pwdEdt.getText().toString();
new Thread(){
@Override
public void run() {
super.run();
post(account, password);;
}
}.start();
break;
}
}
private void post(String account, String password) {
try {
//HttpURLConnection
//1、实例化一个URL对象
URL url = new URL("https://www.imooc.com/api/okhttp/postmethod");
//2、获取HttpURLConnection实例
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//3、设置和请求相关的属性
// 请求方式
conn.setRequestMethod("POST");
// 请求超时时长
conn.setConnectTimeout(10000);
// 设置允许输出
conn.setDoOutput(true);
// 设置请求输出类型
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
// 获取输出流(请求正文)
OutputStream out = conn.getOutputStream();
out.write(("account="+account+"&pwd="+password).getBytes());
//4、获取响应码 默认先发送请求后获取响应码 200成功 404未找到指定资源 500服务器错误
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
//5、判断响应码并获取响应数据
//获取响应输入流
InputStream in = conn.getInputStream();
//在循环中读取输入流
byte[] b = new byte[1024];
// in.read(b); //该方法返回值是int类型数据,代表的是实际的数据长度
int len = 0;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while((len = in.read(b)) > -1){
//将字节数组里面的内容存/写入缓存流
//参数1:待写入的数组
//参数2:起点
//参数3:长度
baos.write(b, 0, len);
}
String msg = new String(baos.toString());
Log.e("TAG", msg+"========");
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
结果:
5、get vs post 三、Json数据解析 1、认识Json数据格式 2、利用JSONObject解析 常用方法 getJSONObject(String name) - 获取JSONObject对象常用方法 toString() - 把JSONObject对象转换为json格式的字符串例子:
public void parseJSONObject(){
new Thread(){
@Override
public void run() {
super.run();
String msg = get();
//解析 JSONObject
//参数 满足json要求的字符串
try {
JSONObject jo = new JSONObject(msg);
//getJSONObject(String name)
int status = jo.getInt("status");
String msgText = jo.getString("msg");
JSONObject data = jo.getJSONObject("data");
String title = data.getString("title");
Log.e("TAG", "run: " + status + "---" +msgText);
// 显示到界面上
//此方法在子线程中调用,可以在内部处理界面显示问题
//因为它相当于在此刻将 *** 作权由子线程移交给了主线程
runOnUiThread(new Runnable() {
@Override
public void run() {
textView.setText(title);
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
}.start();
}
常用方法 getJSONArray - 获取JSONArray对象
例子:
public void parseJSONObject(){
new Thread(){
@Override
public void run() {
super.run();
String msg = get();
//解析 JSONObject
//参数 满足json要求的字符串
try {
JSONObject jo = new JSONObject(msg);
//getJSONObject(String name)
int status = jo.getInt("status");
String msgText = jo.getString("msg");
//为ListView准备数据源
List
3、GSON解析
常用方法:toJson-将bean对象转换位json字符串常用方法:fromJson-将json字符串转换为bean对象
例子:
Book.java
package com.example.internetproject;
public class Book {
private String title;
private String author;
private String content;
public Book(String title, String author, String content) {
this.title = title;
this.author = author;
this.content = content;
}
public Book() {
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
@Override
public String toString() {
return "Book{" +
"title='" + title + '\'' +
", author='" + author + '\'' +
", content='" + content + '\'' +
'}';
}
}
JSONActivity.java
package com.example.internetproject;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.google.gson.Gson;
import org.json.JSONArray;
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;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class JSONActivity extends AppCompatActivity {
private TextView textView;
private ListView listView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_json);
textView = findViewById(R.id.textView);
listView = findViewById(R.id.list_view);
findViewById(R.id.parse).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
parseByGSON();
}
});
}
public void parseByGSON(){
//1、添加依赖
//2、实例化一个GSON对象
Gson gson = new Gson();
//3、toJson 将对象变为json字符串
Book b = new Book("西游记", "吴承恩", "西天取经故事");
String str = gson.toJson(b);
Log.e("TAG", str);
//4、fromJson 将字符串还原为对象
Book b2 = gson.fromJson(str, Book.class);
Log.e("TAG", b2.toString());
}
}
项目地址: 链接:https://pan.baidu.com/s/1Q5U34STGY1SkDRikpXhz1Q 提取码:95ju
坐得住板凳,耐得住寂寞,守得住初心!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)