准备工作
获取依赖:
dependencies {
...
implementation 'com.google.code.gson:gson:2.8.0'
implementation 'com.android.volley:volley:1.1.1'
}
获取网络访问权限
<uses-permission android:name="android.permission.INTERNET"/>
I.页面布局
<?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:layout_height="match_parent"
android:orientation="vertical"
android:background="#999AAA"
tools:context=".MainActivity">
<EditText
android:id="@+id/edt_input_url"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入API网址"
android:background="@drawable/border"
android:layout_margin="5dp"
android:lines="3"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<Button
android:id="@+id/btn_get"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:text="获取"
/>
<Button
android:id="@+id/btn_parsing"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:text="解析"
/>
<Button
android:id="@+id/btn_clear"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:text="清空"
/>
</LinearLayout>
<TextView
android:id="@+id/tv_show"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="5dp"
android:text=""
android:textSize="20dp"/>
</LinearLayout>
II.Volley获取
package net.tyao.task5;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.gson.Gson;
import java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private EditText edtInputUrl;
private Button btnGet,btnParsing,btnClear;
private TextView tvShow;
private RequestQueue mRequestQueue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edtInputUrl = findViewById(R.id.edt_input_url);
btnGet = findViewById(R.id.btn_get);
btnParsing = findViewById(R.id.btn_parsing);
btnClear = findViewById(R.id.btn_clear);
tvShow = findViewById(R.id.tv_show);
// edtInputUrl.setText("http://poetry.apiopen.top/poetryFull?count=2&page=1");
btnGet.setOnClickListener(this);
btnParsing.setOnClickListener(this);
btnClear.setOnClickListener(this);
Context context;
mRequestQueue = Volley.newRequestQueue(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_get: {
String url = edtInputUrl.getText().toString();
if (url.length() == 0) {
Context context;
Toast.makeText(MainActivity.this, "输入为空,请重新输入!",Toast.LENGTH_LONG).show();
}
final StringRequest stringRequest = new StringRequest(
url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
String content = new String(response.toString());
tvShow.setText(content);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this,"服务请求失败!",Toast.LENGTH_LONG).show();
}
}
);
mRequestQueue.add(stringRequest);
break;
}
case R.id.btn_parsing: {
}
case R.id.btn_clear: {
tvShow.setText("");
edtInputUrl.setText("");
break;
}
}
}
}
III.Gson解析
使用GsonFormatplus插件
package net.tyao.task5;
import androidx.annotation.NonNull;
import java.util.List;
public class Result {
private int code;
private String message;
private List<ResultBean> result;
public static class ResultBean {
private String title;
private String dynasty;
private String writer;
private String content;
private String type;
private String remark;
private String appreciation;
private String translation;
private String simpleIntro;
private String detailIntro;
@NonNull
@Override
public String toString() {
return " 诗歌名称→" + title +"\n"+
" 朝代→" + dynasty +"\n"+
" 作者→" + writer +"\n"+
" 内容→" + content +"\n"+
" 派别→" + type +"\n"+
" 注释→" + remark +"\n"+
" 解析→" + appreciation +"\n\n";
}
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public List<ResultBean> getResult() {
return result;
}
public void setResult(List<ResultBean> result) {
this.result = result;
}
}
最后在MainActivity中添加Gson的解析方法:
case R.id.btn_parsing: {
String jsonUtil = tvShow.getText().toString();
Gson gson = new Gson();//Gson对象
Result result = gson.fromJson(jsonUtil, Result.class);
List<Result.ResultBean> resultList = result.getResult();
String data = resultList.toString();
data = data.substring(0,data.length() - 1);
data = data.substring(1);
tvShow.setText(data);
break;
}