Java 解析XML,我没有错误,我没有';我不知道怎么了?
我试图在我的Java 解析XML,我没有错误,我没有';我不知道怎么了?,java,android,xml,parsing,android-asynctask,Java,Android,Xml,Parsing,Android Asynctask,我试图在我的列表视图中获取rss源,然后打开每个列表行的描述。我不知道为什么我的项目会关闭。我做错了什么 这是我的代码: MainActivity.java public class MainActivity extends Activity { // A reference to the local object private MainActivity local; /** * This method creates main application view */ @Overri
列表视图中获取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));
}
}
}
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);
}
}
在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)
因此,在GetRSSDataTask
的onPostExecute()
中的MainActivity
的第73行,有一些内容是null
现在我们知道了如何查找异常,并且知道第73行是
itcItems.setAdapter(adapter);
因此,您需要查看什么是null
,以及什么可能导致此异常。如果itcItems
不是null
,设置一个断点并查看,那么您的适配器可能是null
现在您知道了如何阅读日志,这将帮助您只发布最相关的代码。在这种情况下,不需要其他类和xml文件,因为异常发生在MainActivity
中。最初只发布最相关的代码会更容易获得帮助。您的ArrayAdapter
在尝试getCount()
时,会在setAdapter
中发出空指针异常。这很可能是因为在onPostExecute
编辑:
onPostExecute
使用从doInBackground
返回的结果,在您的情况下,该结果返回null
。这意味着result
在onPostExecute
中是null
,您使用result
构建一个适配器,它是null
,这就是为什么当您尝试使用count=0
设置适配器时会出现null指针异常。这意味着您在try catch
块中得到一个异常
,因此它返回null
,而不是返回rssReader.getItems()
main活动的第73行是什么?有一些东西是null
。我看到的和它的null是:私有类GetRSSDataTask extensed AsyncTask(“return null;”)。如果我不将它保留为null,我会出错,因为您必须返回一些东西。但这不是第73行。嗯,明白了,我该如何修复它?看看调试时在try-catch块中抛出了什么错误。然后把它寄出去。然后我们将尝试解决这个问题。我再次运行了这个项目,并更新了我最初的问题log cat说什么。do log.e(“ITCRssAtomReader”,e.getMessage());登录过logcat吗?
<?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>
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)
FATAL EXCEPTION: main
01-14 01:45:08.103: E/AndroidRuntime(3181): java.lang.NullPointerException
at net.con.MainActivity$GetRSSDataTask.onPostExecute(MainActivity.java:73)
itcItems.setAdapter(adapter);