Android GridView反向

Android GridView反向,android,gridview,Android,Gridview,我在GridView中有来自在线数据库的图片,我希望它的顺序相反。 因此,我希望当我向数据库中添加新图片时,它是GridView中的第一张图片 我试图找到一个答案,但在stackoverflow一点也没有 这是我的ListViewAdapter: public class GetMovieImagesListViewAdapter extends BaseAdapter { private JSONArray dataArray; private Activity activity; pri

我在GridView中有来自在线数据库的图片,我希望它的顺序相反。 因此,我希望当我向数据库中添加新图片时,它是GridView中的第一张图片

我试图找到一个答案,但在stackoverflow一点也没有

这是我的ListViewAdapter:

public class GetMovieImagesListViewAdapter extends BaseAdapter {

private JSONArray dataArray;
private Activity activity;

private static final String baseUrlForImage = "http://google.com";

private static LayoutInflater inflater = null;

public GetMovieImagesListViewAdapter(JSONArray jsonArray, Activity a){

    this.dataArray = jsonArray;
    this.activity = a;

    inflater = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}


@Override
public int getCount() {
    return this.dataArray.length();
}

@Override
public Object getItem(int position){
    return position;
}

@Override
public long getItemId(int position){
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    final ListCell cell;
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.get_images_from_movies_list_cell, null);
        cell = new ListCell();

        cell.MovieImages = (ImageView) convertView.findViewById(R.id.movie_images_id);

        convertView.setTag(cell);
    } else {
        cell = (ListCell) convertView.getTag();
    }

    try {
        JSONObject jsonObject = this.dataArray.getJSONObject(position);

        String nameOfImage = jsonObject.getString("image");

        String urlForImageInServer = baseUrlForImage + nameOfImage;

        new AsyncTask<String, Void, Bitmap>(){

            @Override
            protected Bitmap doInBackground(String... params)
            {
                String url = params[0];
                Bitmap icon = null;

                try
                {
                    InputStream in = new URL(url).openStream();
                    icon = BitmapFactory.decodeStream(in);
                } catch (IOException e) {
                    e.printStackTrace();
                }

                return icon;
            }

            @Override
            protected void onPostExecute(Bitmap result)
            {
                cell.MovieImages.setImageBitmap(result);
            }
        }.execute(urlForImageInServer);


    } catch (JSONException e) {
        e.printStackTrace();
    }
    return convertView;

}
private class ListCell{

    private ImageView MovieImages;
}}
公共类GetMovieImagesListViewAdapter扩展了BaseAdapter{
私有JSONArray数据阵列;
私人活动;
私有静态最终字符串baseUrlForImage=”http://google.com";
专用静态充气机=空;
公共GetMovieImagesListViewAdapter(JSONArray JSONArray,活动a){
this.dataArray=jsonArray;
本活动=a;
充气器=(LayoutFlater)this.activity.getSystemService(Context.LAYOUT\u充气器\u服务);
}
@凌驾
public int getCount(){
返回此.dataArray.length();
}
@凌驾
公共对象getItem(int位置){
返回位置;
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
最终列表细胞;
if(convertView==null){
convertView=充气机。充气(R.layout.get\u images\u from\u movies\u list\u单元格,空);
cell=新的ListCell();
cell.MovieImages=(ImageView)convertView.findViewById(R.id.movie\u images\u id);
convertView.setTag(单元格);
}否则{
cell=(ListCell)convertView.getTag();
}
试一试{
JSONObject JSONObject=this.dataArray.getJSONObject(位置);
字符串nameOfImage=jsonObject.getString(“图像”);
字符串urlForImageInServer=baseUrlForImage+图像名称;
新建异步任务(){
@凌驾
受保护位图doInBackground(字符串…参数)
{
字符串url=params[0];
位图图标=空;
尝试
{
InputStream in=新URL(URL).openStream();
icon=BitmapFactory.decodeStream(in);
}捕获(IOE异常){
e、 printStackTrace();
}
返回图标;
}
@凌驾
受保护的void onPostExecute(位图结果)
{
cell.MovieImages.setImageBitmap(结果);
}
}.execute(urlForImageInServer);
}捕获(JSONException e){
e、 printStackTrace();
}
返回视图;
}
私有类列表单元{
私人影像查看电影影像;
}}

您可以通过从数组的末尾开始并向后操作到开头来获取每个JSONObject:

JSONObject jsonObject = this.dataArray.getJSONObject(getCount() - position - 1);

您收到的结果尝试以相反的顺序遍历它。 位图结果数据似乎是您获得的单个数据。我希望在查询联机数据库时,在onPostExecute()方法参数中获得一个数组或数据的arraylist。 例如,如果您以onPostExecute(ArrayList结果)的形式获取数据,那么您可以简单地以相反的顺序迭代“结果”数据,以便以相反的顺序填充网格视图


查看

您确实意识到这会立即崩溃,索引超出范围,对吗?感谢njzk2,进行了编辑。我想现在应该行了,现在行了。但我不知道为什么图片会以30秒的速度变化(第一张图片是第三张,然后是最后一张,第二张图片是最后一张,然后是第一张,等等),然后它们会以正确的顺序出现。以前它也是这样吗?我不太明白你写了什么,这是不是只有在你滚动列表时才会发生?在远程获取实际图像之前,您可能需要为每个电影图像设置占位符图像,但我不能确定。只有在我滚动时才会发生。谢谢您的回答。我明天试试,然后告诉你。