【发布时间】:2019-05-15 21:03:38
【问题描述】:
我想在用户单击回收站视图项中的按钮时发送 POST 请求。当用户单击按钮时,我正在使用 OkHttp3 发出网络请求我正在向节点服务器发送 POST 请求。 我的问题是在 OkHttp3 的 OnResponse 调用中我无法定义 runOnUiThread() 方法。
这是我到目前为止所做的:
MyPostedBookAdapter.java
public class MyPostedBookAdapter extends RecyclerView.Adapter<MyPostedBookAdapter.ViewHolder> {
List<PostedModel> listItem;
Context context;
String id;
private static final String URI = "https:bookbudiapp.herokuapp.com/deleteRow";
public MyPostedBookAdapter(List<PostedModel> listItem, Context context){
this.listItem = listItem;
this.context = context;
}
@NonNull
@Override
public MyPostedBookAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.posted_book,viewGroup,false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull final MyPostedBookAdapter.ViewHolder viewHolder, final int i) {
final PostedModel model = listItem.get(i);
id = model.getPostId();
viewHolder.userBookName.setText(model.getPurchaseBookName());
RequestOptions requestOptions = new RequestOptions();
requestOptions.placeholder(R.drawable.openbook);
Glide.with(context).load(model.getPurchaseImage()).apply(requestOptions).into(viewHolder.userPostBook);
viewHolder.delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context,id,Toast.LENGTH_SHORT).show();
deleteRow();
}
});
}
@Override
public int getItemCount() {
return listItem.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
ImageView userPostBook;
TextView userBookName;
Button delete;
public ViewHolder(@NonNull View itemView) {
super(itemView);
userPostBook = (itemView).findViewById(R.id.userPostBook);
userBookName = (itemView).findViewById(R.id.userBookName);
delete = (itemView).findViewById(R.id.delete);
}
}
private void deleteRow(){
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(20, TimeUnit.SECONDS)
.readTimeout(20,TimeUnit.SECONDS)
.writeTimeout(20, TimeUnit.SECONDS)
.build();
RequestBody formBody = new FormBody.Builder().add("postId",id).build();
Request request = new Request.Builder().url(URI).post(formBody).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) throws IOException {
}
@Override
public void onFailure(Call call, IOException e) {
}
});
}
}
让我知道如何在响应调用中定义 runOnUiThread() 方法。 任何帮助将不胜感激。
谢谢
【问题讨论】:
-
可以通过接口调用父activity/Fragment中的deleteRow方法
-
您正在使用
Context context;而不是使用Activity context;并在MyPostedBookAdapter类的任何地方调用context.runOnUiThread()。
标签: android