Rss Widget:数据不可显示

Rss Widget: Data is not displayable

我正在使用 ShirwaM 的 [Simplistic-RSS][1] 库将我的 Rss-link 显示为小部件。我不明白为什么我的项目不起作用。问题是 Asynctask 工作正常,但结果数据不会显示在 ListView 中。如果列表视图充满了虚拟数据,一切都会完美无缺。

请看我的项目。我用的是 Android Studio.
https://www.androidfilehost.com/?fid=23991606952614831
https://drive.google.com/file/d/0BxU5LL-LGpOPTkk2RW1QeGFYME0/view?usp=sharing

一些片段:

RemoteViewsService (.widget.Service.class):

@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
    int appWidgetId = intent.getIntExtra(
            AppWidgetManager.EXTRA_APPWIDGET_ID,
            AppWidgetManager.INVALID_APPWIDGET_ID);
    return (new Provider(this.getApplicationContext(), intent));
}

class Provider(Context applicationContext, Intent intent) {
        context = applicationContext;
        appWidgetId = intent.getIntExtra(
                AppWidgetManager.EXTRA_APPWIDGET_ID,
                AppWidgetManager.INVALID_APPWIDGET_ID);
//        new GetRssFeed().execute(RSS_SOURCE_URL);
    }

    @Override
    public RemoteViews getViewAt(int position) {
        Log.i("getViewAt", String.valueOf(position));
        if (position == 0 || position == 1) {
            Log.i("getViewAt", " is working (" + position + ")");
        }
        final RemoteViews remoteView = new RemoteViews(
                context.getPackageName(),
                R.layout.item_awidget);
        remoteView.setTextViewText(R.id.title,"toto");
        remoteView.setTextViewText(R.id.content1, "titi");
        remoteView.setTextViewText(R.id.content2,"titit");
        remoteView.setTextViewText(R.id.content3, "fhjfhjf");
        remoteView.setTextViewText(R.id.content4, "EMPTY");
        return remoteView;
    }
//

    @Override
    public RemoteViews getLoadingView() { return null; }

    @Override
    public void onCreate() {
        //  new GetRssFeed().execute(RSS_SOURCE_URL);
    }

    @Override
    public void onDestroy() { }

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

    @Override
    public int getViewTypeCount() { return 1; }

    @Override
    public long getItemId(int position) { return position; }

    @Override
    public boolean hasStableIds() { return true; }

    @Override
    public void onDataSetChanged() {
        //   new GetRssFeed().execute(RSS_SOURCE_URL);
    }


AsyncTask (to bring in):

    public class GetRssFeed extends AsyncTask<String, Void, List<RssItem>> {
        @Override
        protected List<RssItem> doInBackground(String... params) {
            try {
                RssReader rssReader = new RssReader(params[0]);
                Log.i("dpInBack ", String.valueOf(rssReader.getItems().size()));
                return rssReader.getItems();
            } catch (Exception e) {
                Log.v("Error Parsing Data", e + "");
            }
            return null;
        }

        @Override
        protected void onPostExecute(List<RssItem> pList ) {
            Log.i("list size ", String.valueOf(pList.size()));
            for(int i=0; i<pList.size(); i++) {
                if (i == 0) {
                    Log.i("onPostExecute", pList.get(i).getTitle());
                }
                RssItem item = new RssItem();
                item.setTitle(pList.get(i).getTitle());
                item.setDescription(pList.get(i).getDescription());
                item.setLink(pList.get(i).getLink());
                item.setImageUrl(pList.get(i).getImageUrl());
                feeds.add(item);
            }
        }
    }

好吧,我终于找到了解决方法。诀窍是使用RemoteViewsFactory而不是而不是来使用AsyncTask。在此上下文中无法使用 AsyncTask

比如改..

@Override
public void onCreate() {
    new GetRssFeed().execute(RSS_SOURCE_URL);
}

@Override
public void onDataSetChanged() {
    new GetRssFeed().execute(RSS_SOURCE_URL);
}

@Override
public void onDestroy() { }


public class GetRssFeed extends AsyncTask<String, Void, List<RssItem>> {
        @Override
        protected List<RssItem> doInBackground(String... params) { [..] }

        @Override
        protected void onPostExecute(List<RssItem> pList ) { [..] }
    }


到..

@Override
public void onCreate() {
    feeds.clear;
    initData();
}

@Override
public void onDataSetChanged() {
    feeds.clear;
    initData();
}

@Override
public void onDestroy() {
    feeds.clear;
}

public initData(){ [..] }