Java 在GridView中使用Parse加载图像
我正在尝试创建一个应用程序,该应用程序将获取ParseObject中的所有ParseFile,并将它们依次显示在GridView中 我用一个活动完成了这项工作,它代表了一个新闻提要,一切都很好 但是当我试图在我的其他活动中实现相同的方法时,它不起作用 我正在使用AsyncTask在后台加载图像Java 在GridView中使用Parse加载图像,java,android,parse-platform,Java,Android,Parse Platform,我正在尝试创建一个应用程序,该应用程序将获取ParseObject中的所有ParseFile,并将它们依次显示在GridView中 我用一个活动完成了这项工作,它代表了一个新闻提要,一切都很好 但是当我试图在我的其他活动中实现相同的方法时,它不起作用 我正在使用AsyncTask在后台加载图像 ParseQuery<ParseObject> query = new ParseQuery<ParseObject>( "ClassName");
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()
}
}
});
非常感谢你,兄弟。我实现了这一点,它就像一个魅力!这是一个糟糕的解决方案。这将导致适配器在每次用户滚动时调用此后台方法,这将导致性能滞后。您可能会体验到您的循环视图并不平滑。