java - 如何使用 JSOUP 获取 rss 提要中的图像?
问题描述
如今,我对制作 android 应用程序很感兴趣,我没有太多的 java 和应用程序经验,是的,我是新手。我正在尝试通过流行的应用程序示例来学习这项工作,所以我选择了一个项目“Xml Rss Parser”,我发现一些代码特别好用。它解析标题、发布日期、链接并显示在列表视图上。我相信,我已经了解了代码是如何工作的。但我也想获取图像并与其他流行的 android 应用程序一起显示。
尝试使用 JSOUP 来获取图像,我搜索了官方网站、here 和许多网站但失败了:(我知道只有几行工作得很好,但我做不到。
我尝试了一些 JSOUP 代码,一般会得到一个“null”错误 :) 描述中的图像链接,开始(IMG src=),就像这个站点rss 在调试屏幕中;Jsoup 连接此站点,获取标题、pub_date 并再次链接它,但获取的图像链接显示为 null :) 所以我在某处有一些错误并且不知道。你可以帮帮我吗?
package com.journaldev.androidrssfeedtutorial;
public class RSSFeedActivity extends ListActivity {
private ProgressBar pDialog;
ArrayList<HashMap<String, String>> rssItemList = new ArrayList<>();
RSSParser rssParser = new RSSParser();
Toolbar toolbar;
List<RSSItem> rssItems = new ArrayList<>();
private static String TAG_TITLE = "title";
private static String TAG_LINK = "link";
private static String TAG_PUB_DATE = "pubDate";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rss_feed);
String rss_link = getIntent().getStringExtra("rssLink");
new LoadRSSFeedItems().execute(rss_link);
ListView lv = getListView();
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent in = new Intent(getApplicationContext(), BrowserActivity.class);
String page_url = ((TextView) view.findViewById(R.id.page_url)).getText().toString().trim();
in.putExtra("url", page_url);
startActivity(in);
}
});
}
public class LoadRSSFeedItems extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressBar(RSSFeedActivity.this, null, android.R.attr.progressBarStyleLarge);
RelativeLayout relativeLayout = findViewById(R.id.relativeLayout);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT
);
lp.addRule(RelativeLayout.CENTER_IN_PARENT);
pDialog.setLayoutParams(lp);
pDialog.setVisibility(View.VISIBLE);
relativeLayout.addView(pDialog);
}
@Override
protected String doInBackground(String... args) {
// rss link url
String rss_url = args[0];
// list of rss items
rssItems = rssParser.getRSSFeedItems(rss_url);
// looping through each item
for (RSSItem item : rssItems) {
// creating new HashMap
if (item.link.toString().equals(""))
break;
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
String givenDateString = item.pubdate.trim();
SimpleDateFormat sdf = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
try {
Date mDate = sdf.parse(givenDateString);
SimpleDateFormat sdf2 = new SimpleDateFormat("EEEE, dd MMMM yyyy - hh:mm a", Locale.US);
item.pubdate = sdf2.format(mDate);
} catch (ParseException e) {
e.printStackTrace();
}
//
// I think JSOUP codes should be here, and tried some codes here
//
map.put(TAG_TITLE, item.title);
map.put(TAG_LINK, item.link);
map.put(TAG_PUB_DATE, item.pubdate); // If you want parse the date
// adding HashList to ArrayList
rssItemList.add(map);
}
// updating UI from Background Thread
runOnUiThread(new Runnable() {
public void run() {
ListAdapter adapter = new SimpleAdapter(
RSSFeedActivity.this,
rssItemList, R.layout.rss_item_list_row,
new String[]{TAG_LINK, TAG_TITLE, TAG_PUB_DATE},
new int[]{R.id.page_url, R.id.title, R.id.pub_date});
// updating listview
setListAdapter(adapter);
}
});
return null;
}
protected void onPostExecute(String args) {
pDialog.setVisibility(View.GONE);
}
}
}
解决方案
推荐阅读
- python - Python 3.6 BaseHTTPRequestHandler 不响应请求
- jquery - Moment js开闭时间
- javascript - 如何使用 Javascript 根据页面 URL 显示 2 个随机数并将其存储到用户缓存中?
- c# - Visual Studio 无法与 Xcode 通信
- deployment - Azure DevOps - 计划发布部署不可用
- iis-10 - IIS 请求过滤器规则未显示在 applicationHost.config 中
- bash - 在 bash shell 中使用重命名命令重命名文件
- interrupt-handling - 如何处理虚假中断?
- python - 检查表 B 中的 X、Y 列对是否在表 A 中任何 X、Y 列对的增量距离内
- single-sign-on - 使用 SAML 和用户数据的卷影副本进行单点登录