- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在我的 ListView
中获取 RSS 提要,然后打开每个列表行的描述。我不知道为什么我的项目关闭。我做错了什么?
这是我的代码:
MainActivity.java
public class MainActivity extends Activity {
// A reference to the local object
private MainActivity local;
/**
* This method creates main application view
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set view
setContentView(R.layout.activity_main);
// Set reference to this activity
local = this;
GetRSSDataTask task = new GetRSSDataTask();
// Start download RSS task
task.execute("http://www.conciencia.net/rss.aspx");
}
private class GetRSSDataTask extends AsyncTask<String, Void, List<RssAtomItem> > {
@Override
protected List<RssAtomItem> doInBackground(String... urls) {
try {
// Create RSS reader
RssAtomReader rssReader = new RssAtomReader(urls[0]);
// Parse RSS, get items
return rssReader.getItems();
} catch (Exception e) {
Log.e("ITCRssAtomReader", e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(List<RssAtomItem> result) {
// Get a ListView from main view
ListView itcItems = (ListView) findViewById(R.id.listMainView);
// Create a list adapter
ArrayAdapter<RssAtomItem> adapter = new ArrayAdapter<RssAtomItem>(local,android.R.layout.simple_list_item_1, result);
// Set list adapter for the ListView
itcItems.setAdapter(adapter);
// Set list view item click listener
itcItems.setOnItemClickListener(new ListListener(result, local));
}
}
}
详细信息Activity.java
public class DetailsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_details);
String title = (String)getIntent().getExtras().get("title");
String author = (String)getIntent().getExtras().get("author");
String guid = (String)getIntent().getExtras().get("guid");
String description = (String)getIntent().getExtras().get("description");
Log.d("DEBUG", "title:\t" + title);
Log.d("DEBUG", "author:\t" + author);
Log.d("DEBUG", "guid:\t" + guid);
Log.d("DEBUG", "description:\t\t" + description);
TextView titleTV = (TextView)findViewById(R.id.detailsTextView);
TextView titleTV2 = (TextView)findViewById(R.id.detailsTextView2);
TextView titleTV3 = (TextView)findViewById(R.id.detailsTextView3);
TextView titleTV4 = (TextView)findViewById(R.id.detailsTextView4);
titleTV.setText(title);
titleTV2.setText(title);
titleTV3.setText(title);
titleTV4.setText(title);
}
}
RssAtomItem.java
public class RssAtomItem {
private String title;
private String author;
private String guid;
private String description;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getGuid() {
return guid;
}
public void setGuid(String guid) {
this.guid = guid;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
return title;
}
}
ListListener.java
public class ListListener implements OnItemClickListener {
// List item's reference
List<RssAtomItem> listItems;
// Calling activity reference
Activity activity;
public ListListener(List<RssAtomItem> aListItems, Activity anActivity) {
listItems = aListItems;
activity = anActivity;
}
public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
Intent i = new Intent(activity, DetailsActivity.class);
i.setData(Uri.parse(listItems.get(pos).getDescription()));
i.putExtra("title", listItems.get(pos).getTitle());
i.putExtra("author", listItems.get(pos).getAuthor());
i.putExtra("guid", listItems.get(pos).getGuid());
i.putExtra("description", listItems.get(pos).getDescription());
activity.startActivity(i);
}
}
RssAtomParseHandler.java
public class RssAtomParseHandler extends DefaultHandler {
private List<RssAtomItem> rssItems;
// Used to reference item while parsing
private RssAtomItem currentItem;
// Parsing title indicator
private boolean parsingTitle;
// Parsing link indicator
private boolean parsingContents;
// A buffer for title contents
private StringBuffer currentTitleSb;
// A buffer for content tag contents
private StringBuffer currentContentSb;
public RssAtomParseHandler() {
rssItems = new ArrayList<RssAtomItem>();
}
public List<RssAtomItem> getItems() {
return rssItems;
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if ("entry".equals(qName)) {
currentItem = new RssAtomItem();
} else if ("title".equals(qName)) {
parsingTitle = true;
currentTitleSb = new StringBuffer();
} else if ("description".equals(qName)) {
parsingContents = true;
currentContentSb = new StringBuffer();
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if ("entry".equals(qName)) {
rssItems.add(currentItem);
currentItem = null;
} else if ("title".equals(qName)) {
parsingTitle = false;
if (currentItem != null) // There is a title tag for a whole channel present. It is being parsed before the entry tag is present, so we need to check if item is not null
currentItem.setTitle(currentTitleSb.toString());
} else if ("description".equals(qName)) {
parsingContents = false;
if (currentItem != null)
currentItem.setDescription(currentContentSb.toString());
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if (parsingTitle) {
if (currentItem != null)
currentTitleSb.append(new String(ch, start, length));
} else if (parsingContents) {
if (currentItem != null)
currentContentSb.append(new String(ch, start, length));
}
}
}
RssAtomReader.java
public class RssAtomReader {
private String rssUrl;
/**
* Constructor
*
* @param rssUrl
*/
public RssAtomReader(String rssUrl) {
this.rssUrl = rssUrl;
}
/**
* Get RSS items.
*
* @return
*/
public List<RssAtomItem> getItems() throws Exception {
// SAX parse RSS data
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
RssAtomParseHandler handler = new RssAtomParseHandler();
saxParser.parse(rssUrl, handler);
return handler.getItems();
}
}
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android1="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/backgroundm"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ListView
android1:id="@+id/listMainView"
android1:layout_width="match_parent"
android1:layout_height="590dp"
android1:layout_alignParentTop="true"
android1:layout_centerHorizontal="true"
android1:layout_marginTop="125dp" >
</ListView>
</RelativeLayout>
activity_details.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/detailsTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="[POST TITLE GOES HERE]"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textStyle="bold" />
<TextView
android:id="@+id/detailsTextView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="[POST AUTHOR GOES HERE]"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/detailsTextView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="[POST GUID GOES HERE]"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/detailsTextView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="[POST DESCRIPTION GOES HERE]"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
这是 Logcat 所说的:
01-14 03:38:55.933: D/gralloc_goldfish(5610): Emulator without GPU emulation detected.
01-14 03:38:56.623: E/(5610): At line 8, column 71: not well-formed (invalid token)
01-14 03:38:56.633: D/AndroidRuntime(5610): Shutting down VM
01-14 03:38:56.633: W/dalvikvm(5610): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
01-14 03:38:56.653: E/AndroidRuntime(5610): FATAL EXCEPTION: main
01-14 03:38:56.653: E/AndroidRuntime(5610): java.lang.NullPointerException
01-14 03:38:56.653: E/AndroidRuntime(5610): at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:330)
01-14 03:38:56.653: E/AndroidRuntime(5610): at android.widget.ListView.setAdapter(ListView.java:462)
01-14 03:38:56.653: E/AndroidRuntime(5610): at net.con.MainActivity$GetRSSDataTask.onPostExecute(MainActivity.java:75)
01-14 03:38:56.653: E/AndroidRuntime(5610): at net.con.MainActivity$GetRSSDataTask.onPostExecute(MainActivity.java:1)
01-14 03:38:56.653: E/AndroidRuntime(5610): at android.os.AsyncTask.finish(AsyncTask.java:631)
01-14 03:38:56.653: E/AndroidRuntime(5610): at android.os.AsyncTask.access$600(AsyncTask.java:177)
01-14 03:38:56.653: E/AndroidRuntime(5610): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
01-14 03:38:56.653: E/AndroidRuntime(5610): at android.os.Handler.dispatchMessage(Handler.java:99)
01-14 03:38:56.653: E/AndroidRuntime(5610): at android.os.Looper.loop(Looper.java:137)
01-14 03:38:56.653: E/AndroidRuntime(5610): at android.app.ActivityThread.main(ActivityThread.java:5041)
01-14 03:38:56.653: E/AndroidRuntime(5610): at java.lang.reflect.Method.invokeNative(Native Method)
01-14 03:38:56.653: E/AndroidRuntime(5610): at java.lang.reflect.Method.invoke(Method.java:511)
01-14 03:38:56.653: E/AndroidRuntime(5610): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-14 03:38:56.653: E/AndroidRuntime(5610): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-14 03:38:56.653: E/AndroidRuntime(5610): at dalvik.system.NativeStart.main(Native Method)
最佳答案
在您的 logcat 中,以下几行告诉您错误是什么
FATAL EXCEPTION: main
01-14 01:45:08.103: E/AndroidRuntime(3181): java.lang.NullPointerException
所以它是一个NPE
...有些东西是null
。引用您的项目的下一行告诉您异常发生的位置
at net.con.MainActivity$GetRSSDataTask.onPostExecute(MainActivity.java:73)
因此,MainActivity
第 73 行的某些内容为 null
,该内容位于 GetRSSDataTask
的 onPostExecute()
中。
现在我们知道如何找到异常,并且我们知道第 73 行是
itcItems.setAdapter(adapter);
因此您需要查看什么是null
以及什么可能导致此异常。如果 itcItems
不是 null
,设置断点并查看,那么也许您的 adapter
是 null
。
现在您知道如何阅读 logcat,这将帮助您仅发布最相关的代码。在这种情况下,其他类和 xml 文件不是必需的,因为异常发生在 MainActivity
中。最初仅发布最相关的代码可以更轻松地在此处获取帮助。
关于java - 解析XML,我没有错误,我不知道出了什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21104756/
我在使用带有 vector STL 的迭代器时遇到了这个错误。 代码:- #include #include void print_vec(std::vector vec) { auto
JAVA:两个引用“p”&&“pp”之间有区别吗? PrintStream p = new PrintStream(System.out); p.println("lol");
我尝试从主分支中拉出,但收到错误消息: $ git --no-optional-locks -c color.branch=false -c color.diff=false -c color.sta
我面临着一个让我抓狂的问题! 我有一个函数,这个: void load_weapons3(t_env *e, char *name, int x, t_weapon *w) { char
我正在尝试使用 CUDA 中的最小值、最大值、总和和平均值实现并行归约。 这是我目前的主要代码片段。 int main() { const auto count = 8; const
我知道 double free 或 corruption 错误通常是对 big 3 的违规,但在这种情况下,我找不到违规发生的地方。我有一个复制构造函数、析构函数和赋值运算符,适用于任何处理指针的东西
GTK+ 中的“focus”和“focus-in(out)-event”信号有什么区别?哪个先发射?它们与键盘(TAB)和鼠标点击有什么关系。他们互相依赖吗? 我问这个是因为我想在顶层窗口中跟踪当前聚
*** glibc detected *** /home/ghoshs/workspace/Simulator/Debug/Simulator: double free or corruption (
#include #include #include #include using namespace std; #define MAX_WEIGHT 1000000 class Set {
我在服务器上有两个分支一个叫 R2 的分支和一个叫 DEV 的分支我无意中登录了错误的服务器,进入了存储库并执行了GIT pull 源开发但是存储库在 R2 上。所以我意识到我的错误然后尝试通过做一个
我有一个包含循环的大约 1000 个顶点和 3000 个边的有向图。 我试图从给定的顶点找到所有下游(出)路径。 使用以下 Gremlin 查询时 g.V(45712).repeat(out().si
使用 Delphi XE 2 我试图确定缩放方向以将缩放效果应用于图像(TImage),但没有找到执行此操作的函数,并且图像的 OnGesture 事件中的 EventInfo 属性没有此信息. 我见
我正在尝试创建一个 Zoom_image 函数,它使用离散傅里叶变换来缩放灰度图像。如果图像大小小于或等于 4*4 但大小增加,我包含的代码可以工作。它给出“双重释放或损坏(出)中止(核心转储)”错误
当我执行 popAll 函数时,出现以下错误: 双重释放或腐败(出)中止(核心转储) 我想我已经将错误来源缩小到了这个函数。 IntegerStack 是我制作的一个简单的 ADT,其中包含一个名为
我有网络开发背景,我正在尝试创建类似于 this technique 的东西适用于 iOS(使用 Cocoa/Obj C)。我在谷歌搜索资源时遇到了很多困难,因为 iOS 中的“视差”往往指的是 iO
我想实现一个 faceted search对于我的一个项目。我正在使用 PHP5、Mysql 和 Symfony 1.4。显然社区指向Apache Solr这似乎正是我想要完成的。 问题是该网站将在不
我知道有 questions floating around当您没有提供明确的分支名称时,关于来自特定分支的 git pull,但是我想知道即使用户确实指定了不同的分支,是否也可以强制 pull 分支
我正在尝试将我的更改推送到 NAS 上的存储库。它以我无法理解的方式失败。 documentation声明默认情况下 push 仅适用于快进更新。很公平。所以我做了一个 git pull(我的 Rem
我刚开始使用 Oracle 的 Coherence 缓存,我注意到这一点:如果我在缓存中放入一个 ConcurrentHashMap 对象,当我检索它时,我可以看到它被转换为一个普通的 HashMap
我尝试创建一个连接到数据库的线程,从那里获取一些数据并打印到控制台。问题是当该线程完成时抛出异常: 双重免费或腐败(出局)中止(核心转储) 我尝试使用 sqlite3 和 pthread,但这两个并不
我是一名优秀的程序员,十分优秀!