gpt4 book ai didi

java - 从 AsyncTask 填充的 ListView 不会呈现

转载 作者:行者123 更新时间:2023-12-01 22:45:44 45 4
gpt4 key购买 nike

我有一个Task它扩展了 Android AsyncTask为了从我在云中的数据库获取数据。我这样做是为了避免 NetworkingOnMainThread异常(exception)(我知道你可以设置StrictMode,但在我看来,这更像是一种黑客而不是解决方案)。

我没有收到任何错误。我已经检查了调试中的值,并且所有内容都从我的数据库中正确获取。我有一个Venue我在其中设置我的姓名、描述、图像等...以及 ArrayList<Venue>我用于适配器的它已正确实例化。

问题是 - ListView 未呈现。

这是我的自定义适配器代码

public class EventListArrayAdapter extends ArrayAdapter<String> {
Context context;
ArrayList<Venue> values;

public EventListArrayAdapter(Context context, ArrayList<Venue> values) {
super(context, R.layout.single_event_list_item);
this.context = context;
this.values = values;
}

public View getView(int position, View convertView, ViewGroup parent){
View v = convertView;

if(v==null){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.single_event_list_item, null);
}

Venue currEvent = values.get(position);

if(currEvent!=null){
TextView singleItemTitle = (TextView) v.findViewById(R.id.singleItemTitle);
TextView singleItemLocation = (TextView) v.findViewById(R.id.singleItemLocation);
TextView singleItemDate = (TextView) v.findViewById(R.id.singleItemDate);
ImageView singleItemImage = (ImageView) v.findViewById(R.id.singleItemImage);

singleItemTitle.setText(currEvent.getName());
singleItemDate.setText(currEvent.getDate());
singleItemLocation.setText(currEvent.getLocation());
singleItemImage.setImageBitmap(currEvent.getVenueImage());
}
return v;
}

}

这是我的AsyncTask代码

private class FillContentTask extends AsyncTask<String, Void, Void> {
ArrayList<Venue> venues;
Context activity;
ProgressDialog dialog;

public FillContentTask(Context context) {
this.activity = context;
}

@Override
protected void onPreExecute() {
dialog = new ProgressDialog(activity);
dialog.setTitle("Loading...");
dialog.show();
}

@Override
protected Void doInBackground(String... params) {
this.venues = Venue.getAll();
for (Venue currentVenue : this.venues) {
try {
InputStream in = new java.net.URL(currentVenue.getImageURL()).openStream();
currentVenue.setVenueImage(BitmapFactory.decodeStream(in));
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
}
return null;
}

@Override
protected void onPostExecute(Void result) {
ListView list = (ListView) findViewById(R.id.eventList);
EventListArrayAdapter adapter = new EventListArrayAdapter(activity, this.venues);
list.setAdapter(adapter);
dialog.hide();
}
}

正如我已经说过的。据我所知,AsnycTask 可以正常工作,因为 ArrayList<Venue> values正确填写

最佳答案

覆盖 getCount方法在你的 EventListArrayAdapter

@Override
public int getCount()
{
return values.size();
}

或者

更改 super在 EventListArrayAdapter 构造函数中调用

super(context, R.layout.single_event_list_item);

super(context, R.layout.single_event_list_item,values);

您还需要更改 extends ArrayAdapter<String>extends ArrayAdapter<Venue>

关于java - 从 AsyncTask 填充的 ListView 不会呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25404628/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com