ViewPager Not getting Images from server

Karan Kumar :

I am using ViewPager in my app and fetch the data(Images) from server(with JSON). Even if runs smoothly no image is shown in the viewpager.

I read so many tutorial regarding this, but nobody solve my problem. Please tell me where i am wrong...

Here is my code:

view_pager.xml

<android.support.v4.view.ViewPager
    android:id="@+id/viewpager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginBottom="40dp" />

image_view.xml

<ImageView
    android:id="@+id/image_adapter"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerInParent="true"/>

ViewPager_Adapter.java

public class ViewPager_Adapter extends PagerAdapter {

private String urls;
private LayoutInflater inflater;
private Context context;
ArrayList<String> mylist;

public ViewPager_Adapter(Context context, ArrayList<String> mylist) {
    this.context = context;
    this.urls = urls;
    this.mylist = mylist;
    inflater = LayoutInflater.from(context);
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((View) object);
}

@Override
public int getCount() {
    return mylist.size();
}

@Override
public Object instantiateItem(ViewGroup view, int position) {
    View imageLayout = inflater.inflate(R.layout.image_view, null);
    assert imageLayout != null;
    final ImageView imageView = (ImageView) imageLayout.findViewById(R.id.image_adapter);

    Glide.with(context)
            .load(mylist.get(position))               
            .into(imageView);
    view.addView(imageLayout,0);
    return imageLayout;
}

@Override
public boolean isViewFromObject(View view, Object object) {
    return view.equals(object);
}

@Override
public void restoreState(Parcelable state, ClassLoader loader) {
}

@Override
public Parcelable saveState() {
    return null;
}
}

View_Pager.Java

public class View_Pager extends Fragment {
private static ViewPager mPager;
JSONArray responsearray = null;
String imageOne;
private static final String TAG_PHOTO_ONE = "Gallery_Full";
ArrayList<String> myList;
HashMap<String, String> get;
ViewPager_Adapter viewpager_adapter;
LinearLayout addimages;
int REQUEST_CODE = 100;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.view_pager, null);      
    mPager = view.findViewById(R.id.viewpager);      

    new GetImages().execute(true);

           return view;
}

class GetImages extends AsyncTask<Boolean, Void, String> {

    @Override
    protected String doInBackground(Boolean... booleans) {
        ImageApi imageApi = new ImageApi();
        String result = null;
        try {
            result = imageApi.galleryget(sharedPreferences.getString("id", ""));
            JSONObject object = new JSONObject(result);
            if (object.getString("error").equalsIgnoreCase("false")) {
                responsearray = object.getJSONArray("response");
                return "true";
            } else {
                String errormsg = object.getString(result);
                return errormsg;
            }
        } catch (ApiException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        if (s != null) {
            if (s.equalsIgnoreCase("true")) {
                showList(responsearray);
            }
        }
    }
}

public void showList(final JSONArray responsearray) {
    try {
        for (int i = 0; i < responsearray.length(); i++) {
            JSONObject responseObject = responsearray.getJSONObject(i);
            Log.e("COUNT" + i, String.valueOf(responseObject));
            imageOne = responseObject.getString(TAG_PHOTO_ONE);                
            get = new HashMap<>();
            get.put(TAG_PHOTO_ONE, imageOne);
            myList = new ArrayList<>();
            myList.add(String.valueOf(get));
        }

            viewpager_adapter = new ViewPager_Adapter(getActivity(), myList);
            String test = String.valueOf(myList);
            String imgpath = getString(R.string.imgpath);
            String finalimgpath = imgpath + imageOne;
            Log.e("FINALPATH", finalimgpath);

    } catch (JSONException e) {
        e.printStackTrace();
    }
    mPager.setAdapter(viewpager_adapter);
    viewpager_adapter.notifyDataSetChanged();
}
}
Vrushi Patel :

Use this code for showList() as you are not populating you're arrayList properly the data is being over write in one position .

So , what you have to do is initialize it out side of for loop .

public void showList(final JSONArray responsearray) {
 try {

    //here  
    myList = new ArrayList<>();

    for (int i = 0; i < responsearray.length(); i++) {
        JSONObject responseObject = responsearray.getJSONObject(i);
        Log.e("COUNT" + i, String.valueOf(responseObject));
        imageOne = responseObject.getString(TAG_PHOTO_ONE);                
        get = new HashMap<>();
        get.put(TAG_PHOTO_ONE, imageOne);

        myList.add(String.valueOf(get));
    }

        viewpager_adapter = new ViewPager_Adapter(getActivity(), myList);
        String test = String.valueOf(myList);
        String imgpath = getString(R.string.imgpath);
        String finalimgpath = imgpath + imageOne;
        Log.e("FINALPATH", finalimgpath);

} catch (JSONException e) {
    e.printStackTrace();
}
mPager.setAdapter(viewpager_adapter);
viewpager_adapter.notifyDataSetChanged();
}

Edit

Also if your final image path is as below then you have to update your code in adapter for image path as follow.

Update position in view.addView() too.

String test = String.valueOf(mylist.get(position));
        String imgpath = getString(R.string.imgpath);
        String finalimgpath = imgpath + test;

Glide.with(context)
        .load(finalimgpath)               
        .into(imageView);
view.addView(imageLayout,position);
return imageLayout;

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=144085&siteId=1