简体   繁体   English

ViewPager无法从服务器获取图像

[英]ViewPager Not getting Images from server

I am using ViewPager in my app and fetch the data(Images) from server(with JSON). 我在我的应用程序中使用ViewPager并从服务器(使用JSON)中获取数据(图像)。 Even if runs smoothly no image is shown in the viewpager. 即使运行顺利,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 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 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 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 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();
}
}

In your For loop you are initialising your list everytime 在您的For循环中,您每次都在初始化列表

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<>();  // THIS IS WRONG. don't initialise every time 
            myList.add(String.valueOf(get)); // THIS IS ALSO WRONG. you are adding hashmap object to list
        } 

So make your for loop like this 所以让你的for循环像这样

   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(imageOne);
        } 

Use this code for showList() as you are not populating you're arrayList properly the data is being over write in one position . 将此代码用于showList()因为未正确填充arrayList,而数据在一个位置被覆盖。

So , what you have to do is initialize it out side of for loop . 因此,您需要做的是在for循环之外初始化它。

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. 也更新view.addView()位置。

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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM