Android学习日记 使用网络技术
文章目录
前言
如题
一、WebView的用法
使用步骤
代码如下:
布局文件下添加WebView
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
MainActivity.java下:
package com.example.practice;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
webView = findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("http://www.baidu.com");
}
}
二、okHttp网络请求+json解析
使用步骤
main_activity.xml 下写一个按钮这里不在赘述。
build.gradle(app)下添加依赖
implementation("com.squareup.okhttp3:okhttp:3.14.0")
注:用真机测试时,有可能会爆出安装失败错误,gradle.properties下添加以下代码:
android.injected.testOnly=false
MainActivity.java :
package com.example.practice;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import org.json.JSONArray;
import org.json.JSONObject;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity {
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendRequestWithOkHttp();
}
});
}
private void init() {
btn = findViewById(R.id.btn);
}
private void sendRequestWithOkHttp(){
new Thread(new Runnable() {
@Override
public void run() {
try {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
//注意:禁止填写127.0.0.1与localhost 填写本地ip地址
.url("json地址")
.build();
Response response = client.newCall(request).execute();
String responseData = response.body().string();
parseJSONWithJSONObject(responseData);
}catch (Exception e){
e.printStackTrace();
}
}
}).start();
}
private void parseJSONWithJSONObject(String responseData) {
try {
//将json解开
JSONObject object=new JSONObject(responseData);
//获取json里的客户
String user=object.getString("user");
//将user解开
JSONArray array=new JSONArray(user);
for (int i = 0; i < array.length(); i++) {
//获取array里的每一个客户
String person = array.getString(i);
//将客户解开
JSONObject object1=new JSONObject(person);
//获取客户姓名
String name=object1.getString("name");
Log.e("aaa", "parseJSONWithJSONObject: "+name);
}
}catch (Exception e){
e.printStackTrace();
}
}
}
三、HttpURLConnection网络请求与json解析
使用步骤
编写Http工具类
HttpTool.java
package com.example.practice;
import android.os.Handler;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpTool {
public static void Tool(final Handler handler, final String
path , final String json, final HttpCallBack callBack){
new Thread(){
@Override
public void run() {
try {
//建立新的请求
URL url = new URL(path);
//根据请求协议生成HttpURLConnection类
HttpURLConnection conn =
(HttpURLConnection) url.openConnection();
//向conn输入,默认true
conn.setDoInput(true);
//向conn输出,默认false
conn.setDoOutput(true);
//post请求不能使用缓存
conn.setUseCaches(false);
//设置请求的方法为“post”,默认为“get”
conn.setRequestMethod("POST");
//设定传送的内容类型是可序列化的java对象
conn.setRequestProperty("Content-type","application/json");
PrintWriter writer = new PrintWriter(conn.getOutputStream());
writer.print(json);
writer.close();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
final StringBuilder builder = new StringBuilder();
String line;
while((line=reader.readLine())!=null){
builder.append(line);
}
handler.post(new Runnable() {
@Override
public void run() {
callBack.Onub(builder.toString());
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
}
编写回调函数:
HttpCallBack.java
package com.example.practice;
public abstract class HttpCallBack {
public abstract void Onub(String json);
}
在主界面解析json:
MainActivity.java
package com.example.practice;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import org.json.JSONArray;
import org.json.JSONObject;
public class MainActivity extends AppCompatActivity {
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/**
注意:ip地址不要填写localhost和127.0.0.1 AS会当做本地地址 ,正确方法使用自己电脑的IP地址替换localhost或
127.0.0.1
*/
HttpTool.Tool(new Handler(Looper.getMainLooper()), "json地址", "", new HttpCallBack() {
@Override
public void Onub(String json) {
try {
//将json解开
JSONObject object=new JSONObject(json);
//获取json里的user
String user=object.getString("user");
//将user解开
JSONArray array=new JSONArray(user);
for (int i = 0; i < array.length(); i++) {
//获取array里的每一个客户
String users=array.getString(i);
//将客户解开
JSONObject object1=new JSONObject(users);
//获取客户姓名
String name=object1.getString("name");
Log.e("aaa",name);
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
});
}
private void init() {
btn = findViewById(R.id.btn);
}
}
四、OkHttp网络请求与使用Gson解析
大致步骤:
1、导入依赖包
2、编写工具类
3、使用Gson解析
1、首先导入Okhttp与Gson依赖
//gson
implementation 'com.google.code.gson:gson:2.8.6'
//okhttp3
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
2、编写工具类 OkhttpUtil.java
package com.example.okhttpdemo.util;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.Map;
import okhttp3.Call;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class OkhttpUtil {
private static String token;
//创建实例
static OkHttpClient client = new OkHttpClient();
public static String get(String url) {
//创建Request请求对象
final Request req = new Request.Builder()
.url(url)
.get() //默认get请求 ,可以不写
.build();
return req(req);
}
//post 请求:url表示请求的地址,map存放请求参数数据
//传入传出为json格式
public static String post(String url, Map map) {
//设定传输数据格式为json,编码方式为utf-8
//格式化 json数据格式 编码格式
MediaType type = MediaType.parse("application/json;charset=utf-8");
//设定请求正文数据
RequestBody body = RequestBody.create(type,new Gson().toJson(map));
//创建Request请求对象
Request req = new Request.Builder()
.url(url)
//在请求的头部信息添加token数据
// .addHeader("authorization","")
.post(body)
.build();
return req(req);
}
public static String put(String url, Map map) {
//设定传输数据格式为json,编码方式为utf-8
//格式化 json数据格式 编码格式
MediaType type = MediaType.parse("application/json;charset=utf-8");
//设定请求正文数据
RequestBody body = RequestBody.create(type,new Gson().toJson(map));
//创建Request请求对象
Request req = new Request.Builder()
.url(url)
//.addHeader("Authorization","")
.put(body)
.build();
return req(req);
}
private static String req(Request req){
//执行网络请求
Call call = client.newCall(req);
//获取请求结果
try {
Response res = call.execute();
return res.body().string();
} catch (IOException e) {
return null;
}
}
}
3、使用Gson解析
这里编写主activity
根据postman测试出的 json结构编写实体类并 Gson格式化
外环UserList
注意:属性一定与结构体第二层的属性名一致 这里是user
package com.example.okhttpdemo.pojo;
import java.util.List;
public class UserList {
private List<User> user;
public List<User> getUser() {
return user;
}
public void setUser(List<User> user) {
this.user = user;
}
@Override
public String toString() {
return "UserList{" +
"user=" + user +
'}';
}
}
编写第三层User实体类
package com.example.okhttpdemo.pojo;
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
编写主activity点击按钮发送请求
package com.example.practice;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.example.practice.adapter.MyAdapter;
import com.google.gson.Gson;
import java.util.HashMap;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new Runnable() {
@Override
public void run() {
Map<String,String> maplist = new HashMap<>();
Map<String,String> maplist = new HashMap<>();
//maplist.put("","");
//maplist.put("","");
String result = OkhttpUtil.post("你的http地址",maplist);
Log.e("aaa",result);
Gson gson = new Gson();
UserList userList = gson.fromJson(result,UserList.class);
//根据需要对数据进行处理
for (int i = 0;i<userList.getUsers().size();i++){
Log.e("aaa",userList.getUsers().get(i).getName()+"");
}
}
}).start();
}
});
}
}