首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用AsyncTask doInBackground后的ListView空白

调用AsyncTask doInBackground后的ListView空白
EN

Stack Overflow用户
提问于 2015-11-26 18:09:42
回答 3查看 168关注 0票数 0

我有一个适配器为我的listView,数据填充从互联网,后台进程运行良好,结果出现在日志猫,但没有在我的列表视图,这里有什么问题?我做错了吗?以下是我的代码

代码语言:javascript
复制
PortalGroup mPortalGroup;
ArrayList<PortalItemData> mItems;
PortalItemListAdapter mAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_group);
    getActionBar().setDisplayHomeAsUpEnabled(true);
    new MyPortal().execute();
        mItems = new ArrayList<PortalItemData>();
        mAdapter = new PortalItemListAdapter(getApplicationContext(), mItems);

        JazzyListView list = (JazzyListView) findViewById(R.id.listGroup);
        list.setAdapter(mAdapter);
        list.setTransitionEffect(new FlyEffect());

}

private class MyPortal extends AsyncTask<Void, Void,Void> {
    ProgressDialog pDialog;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(GroupActivity.this);
        pDialog.setOnDismissListener(new OnDismissListener(){

            @Override
            public void onDismiss(DialogInterface dialogInterface) {
                MyPortal.this.cancel(true);
            }
        });
        pDialog.setMessage("Loading...");
        pDialog.show();
    }

    protected Void doInBackground(Void... params) {
        Portal portal = AccountManager.getInstance().getPortal();
        try {
            PortalInfo portalInfo = portal.fetchPortalInfo();
            List<String> querys = portalInfo.getFeaturedGroupsQueries();
            for (String query : querys) {
                Log.d("Query Group", "[query] " + query);
                PortalQueryResultSet<PortalGroup> result = portal
                        .findGroups(new PortalQueryParams(query));
                for (PortalGroup group : result.getResults()) {
                    Log.d("Available Group", "[group title] " + group.getTitle());
                    PortalQueryParams queryParams = new PortalQueryParams();
                    queryParams.setQuery(PortalItemType.WEBMAP, group.getGroupId(), null);
                    PortalQueryResultSet<PortalItem> results = portal.findItems(queryParams);
                    for (PortalItem item : results.getResults()) {
                        Log.d("Group Item", "[item title] " + item.getTitle());
                        byte[] data = item.fetchThumbnail();
                        if (data != null) {
                            Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
                            PortalItemData portalItemData = new PortalItemData(item, bitmap);
                            mItems.add(portalItemData);

                        }
                    }
                }
            }
            pDialog.dismiss();
        } catch (Exception e) {
            e.printStackTrace();
            onError(e);
        }
        return null;
    }

    public void onError(Throwable e) {
        Toast.makeText(GroupActivity.this, getString(R.string.failed_sign_in), Toast.LENGTH_SHORT).show();
        pDialog.dismiss();
    }

    protected void onPostExecute() {
         mAdapter.notifyDataSetChanged();
        pDialog.dismiss();
    }
}

private class PortalItemListAdapter extends ArrayAdapter<PortalItemData> {
    private LayoutInflater inflater=null;

    public PortalItemListAdapter(Context context, ArrayList<PortalItemData> items) {
        super(context, 0, items);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_group, parent, false);
        }

        // Setup item thumbnail
        PortalItemData item = getItem(position);
        ImageView image = (ImageView) convertView.findViewById(R.id.img);
        image.setImageBitmap(item.itemThumbnail);

        // Setup item title
        TextView text = (TextView) convertView.findViewById(R.id.txt);
        text.setText(item.portalItem.getTitle());
        return convertView;
    }

}


private class PortalItemData {
    PortalItem portalItem;

    Bitmap itemThumbnail;

    public PortalItemData(PortalItem item, Bitmap bt) {
        this.portalItem = item;
        this.itemThumbnail = bt;
    }
}
EN

回答 3

Stack Overflow用户

发布于 2015-11-26 18:14:52

onPostExecute中,您可能想要填充您的ListView

在获取doInBackground的值之后,在mItems中实例化您的Adapter,即mAdapter。最后,在onPostExecute中将Adapter设置为ListView

票数 0
EN

Stack Overflow用户

发布于 2015-11-26 18:22:56

2个解决方案

  • 中添加mAdapter.notifyDataSetChanged() on
    • 适配器并将其设置为mAdapter.notifyDataSetChanged()

在某些情况下,您当前的代码实际上会导致Exception

票数 0
EN

Stack Overflow用户

发布于 2015-11-26 18:26:30

使用下面的代码

代码语言:javascript
复制
private class MyPortal extends AsyncTask<Void, Void,Void> {
ProgressDialog pDialog;
@Override
protected void onPreExecute() {
    super.onPreExecute();
    pDialog = new ProgressDialog(GroupActivity.this);
    pDialog.setOnDismissListener(new OnDismissListener(){

        @Override
        public void onDismiss(DialogInterface dialogInterface) {
            MyPortal.this.cancel(true);
        }
    });
    pDialog.setMessage("Loading...");
    pDialog.show();
}

protected Void doInBackground(Void... params) {
    Portal portal = AccountManager.getInstance().getPortal();
    try {
        PortalInfo portalInfo = portal.fetchPortalInfo();
        List<String> querys = portalInfo.getFeaturedGroupsQueries();
        for (String query : querys) {
            Log.d("Query Group", "[query] " + query);
            PortalQueryResultSet<PortalGroup> result = portal
                    .findGroups(new PortalQueryParams(query));
            for (PortalGroup group : result.getResults()) {
                Log.d("Available Group", "[group title] " + group.getTitle());
                PortalQueryParams queryParams = new PortalQueryParams();
                queryParams.setQuery(PortalItemType.WEBMAP, group.getGroupId(), null);
                PortalQueryResultSet<PortalItem> results = portal.findItems(queryParams);
                for (PortalItem item : results.getResults()) {
                    Log.d("Group Item", "[item title] " + item.getTitle());
                    byte[] data = item.fetchThumbnail();
                    if (data != null) {
                        Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
                        PortalItemData portalItemData = new PortalItemData(item, bitmap);
                        mItems.add(portalItemData);

                    }
                }
            }
        }
        pDialog.dismiss();
    } catch (Exception e) {
        e.printStackTrace();
        onError(e);
    }
    return null;
}

public void onError(Throwable e) {
    Toast.makeText(GroupActivity.this, getString(R.string.failed_sign_in), Toast.LENGTH_SHORT).show();
    pDialog.dismiss();
}

protected void onPostExecute() {
    list.setAdapter(mAdapter);
    list.setTransitionEffect(new FlyEffect());
    pDialog.dismiss();
}

}

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33935799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档