Java 在GridView中使用Parse加载图像

Java 在GridView中使用Parse加载图像,java,android,parse-platform,Java,Android,Parse Platform,我正在尝试创建一个应用程序,该应用程序将获取ParseObject中的所有ParseFile,并将它们依次显示在GridView中 我用一个活动完成了这项工作,它代表了一个新闻提要,一切都很好 但是当我试图在我的其他活动中实现相同的方法时,它不起作用 我正在使用AsyncTask在后台加载图像 ParseQuery<ParseObject> query = new ParseQuery<ParseObject>( "ClassName");

我正在尝试创建一个应用程序,该应用程序将获取ParseObject中的所有ParseFile,并将它们依次显示在GridView中

我用一个活动完成了这项工作,它代表了一个新闻提要,一切都很好

但是当我试图在我的其他活动中实现相同的方法时,它不起作用

我正在使用AsyncTask在后台加载图像

ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(
                "ClassName");
        query.findInBackground(new FindCallback<ParseObject>() {

            @Override
            public void done(List<ParseObject> list, ParseException e) {
                // TODO Auto-generated method stub
                if (e == null) {
                    // hear u will get responce.
                    for (ParseObject parseObject : list) {
                        ParseFile image = (ParseFile) parseObject.get(""); // hear
                                                                            // set
                                                                            // column
                                                                            // name
                                                                            // same
                                                                            // as
                                                                            // parse
                                                                            // table
                        if (image != null) {
                            // hear store image into your custom array.
                            // Like...
                            Log.e("get Image ",
                                    " IMAGE URL IS " + image.getUrl());
                        }
                    }

                    // and hear u can set your adapter
                    // and yr grid view
                    // in adapter to use Picasso libary for image shower.
                    // how to use picasso lib.
                    Picasso.with(getApplicationContext()).load("image url")
                            .fit().into(imageview);
                } else {
                    // hear is yr fail responce
                    // e.getMessage()
                }

            }
        });
这是我的代码:

ThumbnailItems.java(POJO类)

我的异步任务:

private class RemoteDataTask extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... params) {
        thumbItemsList = new ArrayList<ThumbnailItems>();
        try {
            ParseQuery<ParseObject> postQuery = new ParseQuery<ParseObject>("Posts");

            postQuery.orderByDescending("createdAt");
            objectList = postQuery.find();
            for (ParseObject posts : objectList){

                final ThumbnailItems thumbItems = new ThumbnailItems();
                // Locate user profile picture.
                ParseFile thumbFile = (ParseFile) posts.get("author_img");
                thumbFile.getDataInBackground(new GetDataCallback() {
                    @Override
                    public void done(byte[] bytes, ParseException e) {
                        if (e == null) {
                            Bitmap userImage = Bitmap.createScaledBitmap(
                                    BitmapFactory.decodeByteArray(bytes, 0, bytes.length)
                                    , 150, 150, false);
                            thumbItems.setImage(userImage);
                        } else {
                            Log.d("ParseException", "Error: " + e.getMessage());
                            e.printStackTrace();
                        }
                    }
                });
                thumbItemsList.add(thumbItems);
            }
        } catch (ParseException e){
            Log.e("ParseException", "Error: " + e.getMessage() + " with code: " + e.getCode());
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View activityView = layoutInflater.inflate(R.layout.activity_profile, null, false);
        gridView = (GridView) activityView.findViewById(R.id.gridView);
        gridViewAdapter = new GridViewAdapter(getApplicationContext()
                , R.layout.profile_viewpager_tab1_children
                , thumbItemsList);
        gridView.setAdapter(gridViewAdapter);
    }
}
私有类RemoteDataTask扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的Void doInBackground(Void…参数){
thumbItemsList=新的ArrayList();
试一试{
ParseQuery postQuery=新的ParseQuery(“Posts”);
postQuery.orderByDescending(“createdAt”);
objectList=postQuery.find();
for(ParseObject帖子:objectList){
final ThumbnailItems thumbItems=新ThumbnailItems();
//找到用户配置文件图片。
ParseFile thumbFile=(ParseFile)posts.get(“author_img”);
thumbFile.getDataInBackground(新的GetDataCallback(){
@凌驾
公共void done(字节[]字节,parsee异常){
如果(e==null){
位图用户图像=位图.createScaledBitmap(
BitmapFactory.decodeByteArray(字节,0,字节.长度)
,150,150,假);
setImage(userImage);
}否则{
Log.d(“ParseException”,“Error:+e.getMessage());
e、 printStackTrace();
}
}
});
thumbItemsList.add(thumbItems);
}
}捕获(解析异常){
Log.e(“ParseException”,“Error:+e.getMessage()+”,代码:+e.getCode());
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
LayoutInflater LayoutInflater=(LayoutInflater)getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
视图活动视图=布局平坦。充气(R.layout.activity\u profile,null,false);
gridView=(gridView)activityView.findViewById(R.id.gridView);
gridViewAdapter=新的gridViewAdapter(getApplicationContext()
,R.layout.profile_viewpager_tab1_子项
,thumbItemsList);
setAdapter(gridViewAdapter);
}
}

(我已经看过教程了,但我真的想和我的代码保持一致)

我认为batter应该像这样使用。 不要使用AsyncTask在后台加载图像

ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(
                "ClassName");
        query.findInBackground(new FindCallback<ParseObject>() {

            @Override
            public void done(List<ParseObject> list, ParseException e) {
                // TODO Auto-generated method stub
                if (e == null) {
                    // hear u will get responce.
                    for (ParseObject parseObject : list) {
                        ParseFile image = (ParseFile) parseObject.get(""); // hear
                                                                            // set
                                                                            // column
                                                                            // name
                                                                            // same
                                                                            // as
                                                                            // parse
                                                                            // table
                        if (image != null) {
                            // hear store image into your custom array.
                            // Like...
                            Log.e("get Image ",
                                    " IMAGE URL IS " + image.getUrl());
                        }
                    }

                    // and hear u can set your adapter
                    // and yr grid view
                    // in adapter to use Picasso libary for image shower.
                    // how to use picasso lib.
                    Picasso.with(getApplicationContext()).load("image url")
                            .fit().into(imageview);
                } else {
                    // hear is yr fail responce
                    // e.getMessage()
                }

            }
        });
ParseQuery query=新建ParseQuery(
“类名”);
findInBackground(新的FindCallback(){
@凌驾
公共作废完成(列表,异常解析){
//TODO自动生成的方法存根
如果(e==null){
//听说你会得到回应。
用于(ParseObject ParseObject:list){
ParseFile image=(ParseFile)parseObject.get(“”;//hear
//设置
//纵队
//名字
//同样的
//作为
//解析
//桌子
如果(图像!=null){
//将图像存储到自定义阵列中。
//像。。。
Log.e(“获取图像”,
“图像URL是”+IMAGE.getUrl());
}
}
//你可以设置你的适配器
//和网格视图
//在适配器中使用毕加索文库进行图像处理。
//如何使用毕加索文库。
Picasso.with(getApplicationContext()).load(“图像url”)
.fit()。插入(图像视图);
}否则{
//听到是你失败的回应
//e.getMessage()
}
}
});

非常感谢你,兄弟。我实现了这一点,它就像一个魅力!这是一个糟糕的解决方案。这将导致适配器在每次用户滚动时调用此后台方法,这将导致性能滞后。您可能会体验到您的循环视图并不平滑。