I am working on an application where I have the requirement to make the server request on click of a row, All thing working fine but my code does not wait until the response comes so nothing is set to the Image view, Is there anyone who faces the same problem and find the solution.
My Adapter code is:
public class DocumentAdapter extends RecyclerView.Adapter<DocumentAdapter.ViewHolder> implements Response.ErrorListener{
Context context;
private ArrayList<FetchDocument> docDatalist;
private int expandedPosition = -1;
int customerSerial;
private int vinappserial;
ViewHolder holderNew;
UtilityOfActivity utilityOfActivity;
List<ImageFetchResponseDocumentList> list = new ArrayList<>();
public DocumentAdapter(ArrayList<FetchDocument> docDatalist, Context context,String vinappserial) {
this.docDatalist = docDatalist;
this.context = context;
utilityOfActivity = new UtilityOfActivity((Activity) context);
this.vinappserial= Integer.valueOf(vinappserial);
UserDetail userDetail = new Gson().fromJson(PrefrenceFile.getInstance().getString(Constant.PREF_KEY_USER_DATA), UserDetail.class);
customerSerial = userDetail.getLoginResponse().getCustInfo().getCustSerialNo();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_document_listview_adapter, parent, false);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
holder.doc_type.setText(docDatalist.get(position).getDocTypeDesc());
if (position == expandedPosition) {
holder.myDocumentlistexpeded.setVisibility(View.VISIBLE);
} else {
holder.myDocumentlistexpeded.setVisibility(View.GONE);
}
holder.myDocumentListCollapse.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//by the below line I am making the request
imagerequestserver(docDatalist.get(position), vinappserial);
//here I am setting the image to the imageview this code execute before response come
for (int i = 0; i < list.size(); i++) {
NetworkImageView imageView = new NetworkImageView(context);
imageView.setAdjustViewBounds(true);
imageView.setImageUrl(list.get(i).getNewFilePath().concat(list.get(i).getNewFilename()), VolleyRequestQue.getmInstance(context).getImageLoader());
holder.horizontal_scrollView_linear.addView(imageView);
}
if (expandedPosition >= 0) {
int prev = expandedPosition;
notifyItemChanged(prev);
}
// Set the current position to "expanded"
expandedPosition = holder.getPosition();
notifyItemChanged(expandedPosition);
holder.myDocumentlistexpeded.setVisibility(View.VISIBLE);
}
});
holder.layoutAddDoc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
holder.expanded_menu_cameraImage.setVisibility(View.VISIBLE);
}
});
}
@Override
public int getItemCount() {
return docDatalist.size();
}
public interface SendHoldertdata{
void setdata(ViewHolder holder, int position);
}
class ViewHolder extends RecyclerView.ViewHolder {
TextView doc_type;
LinearLayout myDocumentlistexpeded;
LinearLayout myDocumentListCollapse;
LinearLayout horizontal_scrollView_linear;
LinearLayout expanded_menu_cameraImage;
RelativeLayout layoutAddDoc;
public ViewHolder(View itemView) {
super(itemView);
doc_type = (TextView) itemView.findViewById(R.id.doc_type);
myDocumentlistexpeded = (LinearLayout) itemView.findViewById(R.id.myDocumentlistexpeded);
myDocumentListCollapse = (LinearLayout) itemView.findViewById(R.id.myDocumentListCollapse);
horizontal_scrollView_linear = (LinearLayout) itemView.findViewById(R.id.horizontal_scrollView_linear);
expanded_menu_cameraImage = (LinearLayout) itemView.findViewById(R.id.expanded_menu_cameraImage);
layoutAddDoc = (RelativeLayout) itemView.findViewById(R.id.layoutAddDoc);
}
}
public void imagerequestserver(FetchDocument fetchDocument, int vinappserial) {
ImageFetchRequest imageFetchRequest = new ImageFetchRequest();
imageFetchRequest.setCustSerial(customerSerial);
imageFetchRequest.setDocGroup(fetchDocument.getDocTypeCode());
imageFetchRequest.setVehSerial(String.valueOf(vinappserial));
imageFetchRequest.setDocSerial("0");
String url = Constant.API_MAIN + Constant.API_DOCUMENT_IMAGEFETCH;
AbstractVolleyRequest jsonObjectrequest = new
AbstractVolleyRequest(url, this, new DocumentAdapter.DocumentImageFetchResponseListner(fetchDocument, vinappserial), imageFetchRequest, Request.Method.POST);
jsonObjectrequest.setTag("DocumentImageFetchRequest");
Log.v("DocumentFetchRequest", "DocumentImageFetchRequest" + jsonObjectrequest);
VolleyRequestQue.getmInstance(context.getApplicationContext()).addToRequestQueue(jsonObjectrequest);
}
@Override
public void onErrorResponse(VolleyError error) {
if (context != null) {
utilityOfActivity.progresDissmiss();
}
utilityOfActivity.toast(context.getString(R.string.connectivity_server_error));
}
public class DocumentImageFetchResponseListner extends MyListner<ImageFetchResponse> {
ImageFetchResponse response;
FetchDocument fetchDocument;
String vinappserial;
public DocumentImageFetchResponseListner(FetchDocument fetchDocument, int vinappserial) {
super(ImageFetchResponse.class);
this.vinappserial = String.valueOf(vinappserial);
this.fetchDocument = fetchDocument;
// this.moveFromDocList = moveFromDocList;
utilityOfActivity.progressDialogShow(context.getString(R.string.please_wait));
}
@Override
public void onResponse(MyResponse instaResponse) {
utilityOfActivity.progresDissmiss();
if (instaResponse != null) {
if (instaResponse instanceof ImageFetchResponse) {
response = (ImageFetchResponse) instaResponse;
if (response.getResult().getResultStatus().contains("SUCCESS")) {
list = response.getDocumentList();
Log.d("","");
if (list.size() > 0) {
} else {
// imageDelete.setVisibility(View.GONE);
// no_media.setVisibility(View.VISIBLE);
}
/*else {
if (moveFromDocList)
utilityOfActivity.moveFragment(FragmentAddDocument.newInstance(fetchDocument, vinappserial), Constant.TAG_GLOBAL_2, R.id.container);
}*/
} else {
utilityOfActivity.toast(context.getString(R.string.connectivity_server_error));
}
}
}
}
}
}
For any clarification inside the code ask me :
if (response.getResult().getResultStatus().contains("SUCCESS")) {
List<ImageFetchResponseDocumentList> newList = response.getDocumentList();
list.addAll(newList);
Log.d("","");
....
}
Check this code. And do not put request api to adapter. read the link
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.