如何使用改造存储 json 数组响应
how to store json array response using retrofit
我想调用一个 api 端点并在我的 android 应用程序中显示关联的响应。
api 接受该用户的参数 user_name 和 return 响应。
响应在 json 数组中,包含 json 日期、位置和 img (base64)。
回应
[
{
"id": "602a1901a54781517ecb717c",
"date": "2021-02-15T06:47:29.191000",
"location": "mall",
"img": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCASvBLADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/
}
]
我面临的问题是我无法存储响应并对其进行解析。
我正在为此使用改造。
api 调用没有问题,服务器获得成功的请求,问题出在客户端(android 应用程序)。
这是我目前拥有的代码。
ApiInterface.java
interface ApiInterface {
@FormUrlEncoded
@POST("end_point")
Call<List<Task>>getstatus(@Field("user_name") String user_name);
}
Task.java
public class Task {
@SerializedName("user_name")
public String user_name;
public Task(String user_name) {
user_name = user_name.substring(1, user_name.length()-1);
this.user_name= user_name;
}
public String getUser() {
return user_name;
}
}
MainActivity.java
private void LoginRetrofit(String user_name) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("url")
.addConverterFactory(GsonConverterFactory.create())
.build();
final ApiInterface request = retrofit.create(ApiInterface.class);
Call<List<Task>> call = request.getstatus(user_name);
Toast.makeText(getApplicationContext(), "user_name" + " " + call.request(), Toast.LENGTH_LONG).show();
call.enqueue(new Callback<List<Task>>() {
@Override
public void onResponse(Call<List<Task>> call, Response<List<Task>> response) {
try {
List<Task> rs=response.body();
Toast.makeText(getApplicationContext(), "Response" + " "+rs, Toast.LENGTH_LONG).show();
}
catch (Exception e)
{
Log.d("REsponse error",e.getMessage());
}
}
@Override
public void onFailure(Call<List<Task>> call, Throwable t) {
Log.d("Error",t.getMessage());
}
});
}
This is the response which is being returned.
您的数据模型 class 变量应该被序列化或具有与响应中相同的名称,以便改造能够将响应值绑定到您的模型变量。
此外,对于要使用的响应中的每个键值对,您的模型 class 中必须有一个变量。
检查此 example 以了解改造的真正工作原理。
在 MainActivity.java
文件中,当您在 toast 消息中打印 rs
对象时,更新代码如下,它仅打印 对象地址 而不是其中的价值。所以要打印你接收到的对象的值,你必须像 as.
一样调用对象的方法来获取值
MainActivity.java
private void LoginRetrofit(String user_name) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("url")
.addConverterFactory(GsonConverterFactory.create())
.build();
...
call.enqueue(new Callback<List<Task>>() {
@Override
public void onResponse(Call<List<Task>> call, Response<List<Task>> response) {
try {
List<Task> rs=response.body();
if(rs.size() > 0){
Task user = rs.get(0);
String id = user.getId();
String location = user.getLocation();
Toast.makeText(getApplicationContext(),"Response : Id="+id+" and location="+location, Toast.LENGTH_LONG).show();
}
}
catch (Exception e)
{
Log.d("REsponse error",e.getMessage());
}
}
...
});
}
并将 Task
模型更新为
Task.java
public class Task {
@SerializedName("id") public String id;
@SerializedName("date") public String date;
@SerializedName("location") public String location;
@SerializedName("img") public String img;
public Task(String id, String date, String location, String img) {
this.id=id;
this.date=date;
this.location=location;
this.img=img;
}
public String getId(){ return this.id; }
public String getDate(){ return this.date; }
public String getLocation(){ return this.location; }
public String getImg(){ return this.img; }
}
我想调用一个 api 端点并在我的 android 应用程序中显示关联的响应。 api 接受该用户的参数 user_name 和 return 响应。 响应在 json 数组中,包含 json 日期、位置和 img (base64)。
回应
[
{
"id": "602a1901a54781517ecb717c",
"date": "2021-02-15T06:47:29.191000",
"location": "mall",
"img": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCASvBLADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/
}
]
我面临的问题是我无法存储响应并对其进行解析。 我正在为此使用改造。 api 调用没有问题,服务器获得成功的请求,问题出在客户端(android 应用程序)。 这是我目前拥有的代码。 ApiInterface.java
interface ApiInterface {
@FormUrlEncoded
@POST("end_point")
Call<List<Task>>getstatus(@Field("user_name") String user_name);
}
Task.java
public class Task {
@SerializedName("user_name")
public String user_name;
public Task(String user_name) {
user_name = user_name.substring(1, user_name.length()-1);
this.user_name= user_name;
}
public String getUser() {
return user_name;
}
}
MainActivity.java
private void LoginRetrofit(String user_name) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("url")
.addConverterFactory(GsonConverterFactory.create())
.build();
final ApiInterface request = retrofit.create(ApiInterface.class);
Call<List<Task>> call = request.getstatus(user_name);
Toast.makeText(getApplicationContext(), "user_name" + " " + call.request(), Toast.LENGTH_LONG).show();
call.enqueue(new Callback<List<Task>>() {
@Override
public void onResponse(Call<List<Task>> call, Response<List<Task>> response) {
try {
List<Task> rs=response.body();
Toast.makeText(getApplicationContext(), "Response" + " "+rs, Toast.LENGTH_LONG).show();
}
catch (Exception e)
{
Log.d("REsponse error",e.getMessage());
}
}
@Override
public void onFailure(Call<List<Task>> call, Throwable t) {
Log.d("Error",t.getMessage());
}
});
}
This is the response which is being returned.
您的数据模型 class 变量应该被序列化或具有与响应中相同的名称,以便改造能够将响应值绑定到您的模型变量。 此外,对于要使用的响应中的每个键值对,您的模型 class 中必须有一个变量。
检查此 example 以了解改造的真正工作原理。
在 MainActivity.java
文件中,当您在 toast 消息中打印 rs
对象时,更新代码如下,它仅打印 对象地址 而不是其中的价值。所以要打印你接收到的对象的值,你必须像 as.
MainActivity.java
private void LoginRetrofit(String user_name) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("url")
.addConverterFactory(GsonConverterFactory.create())
.build();
...
call.enqueue(new Callback<List<Task>>() {
@Override
public void onResponse(Call<List<Task>> call, Response<List<Task>> response) {
try {
List<Task> rs=response.body();
if(rs.size() > 0){
Task user = rs.get(0);
String id = user.getId();
String location = user.getLocation();
Toast.makeText(getApplicationContext(),"Response : Id="+id+" and location="+location, Toast.LENGTH_LONG).show();
}
}
catch (Exception e)
{
Log.d("REsponse error",e.getMessage());
}
}
...
});
}
并将 Task
模型更新为
Task.java
public class Task {
@SerializedName("id") public String id;
@SerializedName("date") public String date;
@SerializedName("location") public String location;
@SerializedName("img") public String img;
public Task(String id, String date, String location, String img) {
this.id=id;
this.date=date;
this.location=location;
this.img=img;
}
public String getId(){ return this.id; }
public String getDate(){ return this.date; }
public String getLocation(){ return this.location; }
public String getImg(){ return this.img; }
}