gpt4 book ai didi

android - 如何使用 Retrofit 1.9 从以下响应中获取图像?

转载 作者:行者123 更新时间:2023-11-29 19:12:28 25 4
gpt4 key购买 nike

我无法获取图片 url 并在 imageview 中设置。如何使用 Retrofit 1.9 从以下响应中获取图像?JSON 响应如下:

{
"url": [
"http://demo.in/url1/image/707/20170315063426.jpg",
"http://demo.in/url2/image/707/374728.jpg"
],
"imagelist": [
{
"imageId": "1",
"slipId": "707",
"agentId": "6",
"imageType": null,
"slipImage": "20170315063426.jpg"
},
{
"imageId": "2",
"slipId": "707",
"agentId": "6",
"imageType": null,
"slipImage": "374728.jpg"
}
],
"slipId": "707",
"agentId": "6",
"message": "",
"success": "1"
}

我的代码如下用于从 JSON 获取响应,我不知道如何获取图像 url 列表并在 ImageView 中设置:

public class MainActivity extends AppCompatActivity {

MyRecyclerView task_list;
MyAdapter mAdapter;
public static List<String> taskEmployeeLists;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

task_list=(MyRecyclerView)findViewById(R.id.task_list);


task_list.setHasFixedSize(true);

// use a linear layout manager
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(MainActivity.this);
task_list.setLayoutManager(mLayoutManager);

getListofTask();


}

private void getListofTask() {
final ProgressDialog dialog;
dialog = new ProgressDialog(MainActivity.this);
dialog.setMessage("please wait....");
dialog.setCanceledOnTouchOutside(false);
dialog.show();

Map<String, String> map = new HashMap<>();
map.put("username","vishal" );
map.put("password", "vishal");
map.put("slipno", "707");

ApiHandler.getApiService().signin(map, new Callback<Example>() {
@Override
public void success(Example feedcomment, Response response) {
try {
if (feedcomment.getSuccess().equals("1")) {
dialog.dismiss();
taskEmployeeLists = feedcomment.getUrl();
Log.e("Commentlistsize", taskEmployeeLists.size() + "");
try {
mAdapter = new MyAdapter((ArrayList<String>) feedcomment.getUrl());
task_list.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
} catch (Exception e) {
Log.e("exception", e.toString());
}
} else {
dialog.dismiss();
Log.e("status", "0");

task_list.setAdapter(null);

}
} catch (Exception e) {
dialog.dismiss();
Log.e("comment exception", e.toString());
}
}

@Override
public void failure(RetrofitError error) {
dialog.dismiss();
Log.e("retrofit_error", error.toString());
}
});
}

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private ArrayList<String> mDataset;


public MyAdapter(ArrayList<String> url) {
mDataset = url;
}

public class ViewHolder extends RecyclerView.ViewHolder {
// each data item is just a string in this case
public View mainView;
ImageView task_detail,task_discussion;

public ViewHolder(View v) {
super(v);
mainView = v;

task_detail = (ImageView) v.findViewById(R.id.task_detail);
}
}

// Create new views (invoked by the layout manager)
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// create a new view
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_tasks_data, parent, false);

ViewHolder vh = new ViewHolder(v);
return vh;
}

// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
// - get element from your dataset at this position
// - replace the contents of the view with that element

Picasso.with(getApplicationContext()).load(mDataset.get(position).getUrl().toString()).noFade().into(holder.task_detail);
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return mDataset.size();
}
}
}

最佳答案

编辑:这是一个如何使用 Gson 解析 json 的示例。您必须创建与您的 json 匹配的 Pojos 并使用 @SerializedName("fieldname")

注释字段

这是您的 Pojo 的外观(我删除了 getter 和 setter)。演示:

public class Example {
@SerializedName("url")
private List<String> mUrls;

@SerializedName("imagelist")
private List<Imagelist> mImagelist;

@SerializedName("slipId")
private String mSlipId;

@SerializedName("agentId")
private String mAgentId;

@SerializedName("message")
private String mMessage;

@SerializedName("success")
private String mSuccess;
}

还有你的 Imagelist Pojo:

public class Imagelist {

@SerializedName("imageId")
private String mImageId;

@SerializedName("slipId")
private String mSlipId;

@SerializedName("agentId")
private String mAgentId;

@SerializedName("imageType")
private Object mImageType; // Fill in correct type - String maybe?

@SerializedName("slipImage")
private String mSlipImage;
}

在构建 Retrofit 界面时,您必须添加一个 GsonConverterfactory:

.addConverterFactory(GsonConverterFactory.create())

你的 Retrofit 接口(interface)应该有一个像这样的方法

@GET("your/path")
Example requestImageList();

您不能将 url 直接传递到 ImageView。我建议您为此工作使用图像处理库,而不是直接使用 Retrofit。例如 PicassoGlide .

这是毕加索的例子:

Picasso.with(context)
.load(example.getImageList().get(0))
.into(imageView);

这是 Glide 的一个例子:

GlideApp.with(context)
.load(example.getImageList().get(0))
.into(imageView);

关于android - 如何使用 Retrofit 1.9 从以下响应中获取图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44821152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com