현재 RSS 피드를 구문 분석하는 응용 프로그램을 만들고 있습니다. 피드의 정보를 Listview
에 표시하기 위해 XML
끌어 오기 구문 분석기를 사용했습니다. 사용자가 ListView에서 구문 분석 된 제목을 클릭 할 때 시작되는 새로운 활동을 만들고 싶습니다. 새로운 활동에서 방금 클릭 한 항목과 관련된 RSS 피드에서 파싱 된 정보가 더 필요합니다.목록보기에서 항목을 클릭하여 새보기를 표시하십시오.
나는 여러 가지 시도를 시도하고 표시 할 새보기를 시도했지만 불행히도 응용 프로그램이 계속 충돌합니다. 목록의 항목을 클릭하면 필요한 추가 정보를 대화 상자에 표시 할 수 있습니다.
이것은 내가 가지고있는 코드이며, 맨 아래의 마지막 부분은 새로운보기에 연결하려고했던 부분입니다.
public class RssFeed extends ListActivity {
List titles;
List description;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.rss);
titles = new ArrayList();
description = new ArrayList();
try {
URL url = new URL("www.sample.com");
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(false);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(getInputStream(url), "UTF_8");
boolean insideItem = false;
/** While the rss feed has not displayed end_document, pull the title and description information */
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG) {
if (xpp.getName().equalsIgnoreCase("item")) {
insideItem = true;
} else if (xpp.getName().equalsIgnoreCase("title")) {
if (insideItem)
titles.add(xpp.nextText());
} else if (xpp.getName().equalsIgnoreCase("description")) {
if (insideItem)
description.add(xpp.nextText());
}
}else if(eventType==XmlPullParser.END_TAG && xpp.getName().equalsIgnoreCase("item")){
insideItem=false;
}
eventType = xpp.next();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
ArrayAdapter adapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_1, titles);
setListAdapter(adapter);
}
public InputStream getInputStream(URL url) {
try {
return url.openConnection().getInputStream();
} catch (IOException e) {
return null;
}
}
//When the user clicks on a list this runs
protected void onListItemClick(ListView l, View v, int position, long id) {
Intent intent = new Intent(getActivity(), Descriptions.class);
startActivity(intent);
새로운 활동에는보기를 설정하기위한 코드 만 포함됩니다.
import android.os.Bundle;
import android.app.Activity;
public class Descriptions extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.description);
}
}
로그 고양이 -
04-03 19:31:03.446: D/dalvikvm(564): GC freed 8121 objects/330568 bytes in 85ms
04-03 19:31:09.856: D/AndroidRuntime(564): Shutting down VM
04-03 19:31:09.856: W/dalvikvm(564): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
04-03 19:31:09.856: E/AndroidRuntime(564): Uncaught handler: thread main exiting due to uncaught exception
04-03 19:31:09.876: E/AndroidRuntime(564): java.lang.NullPointerException
04-03 19:31:09.876: E/AndroidRuntime(564): at android.content.ComponentName.<init>(ComponentName.java:75)
04-03 19:31:09.876: E/AndroidRuntime(564): at android.content.Intent.<init>(Intent.java:2551)
04-03 19:31:09.876: E/AndroidRuntime(564): at org.me.myandroidstuff.TrafficScotlandPrototype.RssFeed.onListItemClick(RssFeed.java:109)
04-03 19:31:09.876: E/AndroidRuntime(564): at android.app.ListActivity$2.onItemClick(ListActivity.java:312)
04-03 19:31:09.876: E/AndroidRuntime(564): at android.widget.AdapterView.performItemClick(AdapterView.java:284)
04-03 19:31:09.876: E/AndroidRuntime(564): at android.widget.ListView.performItemClick(ListView.java:3285)
04-03 19:31:09.876: E/AndroidRuntime(564): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1640)
04-03 19:31:09.876: E/AndroidRuntime(564): at android.os.Handler.handleCallback(Handler.java:587)
04-03 19:31:09.876: E/AndroidRuntime(564): at android.os.Handler.dispatchMessage(Handler.java:92)
04-03 19:31:09.876: E/AndroidRuntime(564): at android.os.Looper.loop(Looper.java:123)
04-03 19:31:09.876: E/AndroidRuntime(564): at android.app.ActivityThread.main(ActivityThread.java:4363)
04-03 19:31:09.876: E/AndroidRuntime(564): at java.lang.reflect.Method.invokeNative(Native Method)
04-03 19:31:09.876: E/AndroidRuntime(564): at java.lang.reflect.Method.invoke(Method.java:521)
04-03 19:31:09.876: E/AndroidRuntime(564): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
04-03 19:31:09.876: E/AndroidRuntime(564): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
04-03 19:31:09.876: E/AndroidRuntime(564): at dalvik.system.NativeStart.main(Native Method)
04-03 19:31:09.896: I/dalvikvm(564): threadid=7: reacting to signal 3
04-03 19:31:09.906: I/dalvikvm(564): Wrote stack trace to '/data/anr/traces.txt'
앱에 충돌을 일으키는 원인을 알리기 위해 충분한 정보를 제공하지 못했을 수 있습니다. 아마도 스택 추적 및 기타 코드를 추가 할 수 있습니다. – Philio
앱이 언제 충돌합니까? 또한 가능한 경우 logcat을 제공하십시오. – Parnit
널 포인터가 있습니다. RssFeed.java의 109 행을 확인하고 거기에서 무엇을하고 있는지 확인하십시오. – Parnit