Also versuche ich ein GridView zu erstellen, das Bilder von meinem Server lädt, auf dem Parse API läuft.GridView lädt Objekte nur, wenn geklickt wird
Das Problem, das ich habe, ist, wenn ich die Bilder vom Server in die GridView laden, muss ich auf das Fragment klicken, um sie auf dem Bildschirm zu laden.
Ich habe keine Ahnung, warum das passiert.
Das ist mein AsyncTask:
private class RemoteDataTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
thumbItemsList = new ArrayList<PostItems>();
final String userObjectID = ProfileActivity.objectID;
ParseQuery<ParseUser> query = ParseUser.getQuery();
query.getInBackground(userObjectID, new GetCallback<ParseUser>() {
@Override
public void done(ParseUser parseUser, ParseException e) {
if (e == null) {
try {
ParseQuery<ParseObject> postQuery = new ParseQuery<ParseObject>(
"Post");
postQuery.whereEqualTo("user", parseUser);
postQuery.orderByDescending("createdAt");
objectList = postQuery.find();
for (final ParseObject parseObject : objectList) {
thumbItems = new PostItems();
String first_name = parseObject.getString("first_name");
String last_name = parseObject.getString("last_name");
thumbItems.setName(first_name + " " + last_name);
ParseFile image = (ParseFile) parseObject.get("image");
image.getDataInBackground(new GetDataCallback() {
@Override
public void done(byte[] bytes, ParseException e) {
if (e == null) {
Bitmap userImage = BitmapFactory.decodeByteArray(bytes, 0
, bytes.length);
thumbItems.setImage(userImage);
} else {
Log.d("ParseException", "Error: " + e.getMessage());
e.printStackTrace();
}
}
});
thumbItemsList.add(thumbItems);
}
} catch (ParseException e1) {
e1.printStackTrace();
}
} else {
e.printStackTrace();
Log.i("ParseException", e.getMessage());
}
}
});
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
gridViewAdapter = new GridViewAdapter(getContext(), thumbItemsList);
gridView.setAdapter(gridViewAdapter);
swipeRefreshLayout.setRefreshing(false);
}
}
Und das ist mein Gridview-Adapter:
package co.eshg.limo4.adapter;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.List;
import co.eshg.limo4.PostActivity;
import co.eshg.limo4.R;
import co.eshg.limo4.data.PostItems;
import co.eshg.limo4.data.GridViewItem;
import co.eshg.limo4.data.ThumbnailItems;
public class GridViewAdapter extends BaseAdapter implements View.OnClickListener {
Context context;
LayoutInflater inflater;
private List<PostItems> thumbnailsItemsList = null;
private ArrayList<PostItems> arrayList;
public GridViewAdapter(Context context, List<PostItems> thumbnailItemsList) {
this.context = context;
this.thumbnailsItemsList = thumbnailItemsList;
inflater = LayoutInflater.from(context);
this.arrayList = new ArrayList<>();
this.arrayList.addAll(thumbnailItemsList);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.imgThumb:
break;
}
}
public class ViewHolder {
GridViewItem gridViewItem;
}
@Override
public int getCount() {
return thumbnailsItemsList.size();
}
@Override
public Object getItem(int position) {
return thumbnailsItemsList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View view, ViewGroup parent) {
ViewHolder holder;
if (view == null) {
holder = new ViewHolder();
view = inflater.inflate(R.layout.profile_viewpager_tab1_children, null);
holder.gridViewItem = (GridViewItem) view.findViewById(R.id.imgThumb);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
final Bitmap image = thumbnailsItemsList.get(position).getImage();
holder.gridViewItem.setImageBitmap(image);
holder.gridViewItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, PostActivity.class);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
intent.putExtra("PostImage", byteArray);
intent.putExtra("FullName", thumbnailsItemsList.get(position).getName());
context.startActivity(intent, null);
}
});
return view;
}
}
Was ich bisher versucht wird, ein lokales Bild von meinem ziehbar Ordner anstelle des Bildes geladen vom Server, und das funktioniert perfekt. Ich habe das getan, indem ich diese Linie vom Adapter ersetzte: final Bitmap image = thumbnailsItemsList.get(position).getImage();
mit final Bitmap image = BitmapFactory.decodeResource(context.getResources(), R.drawable.dairy_back);
Irgendwelche Hilfe würden geschätzt.