2014-04-03 3 views
0

현재 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' 
+3

앱에 충돌을 일으키는 원인을 알리기 위해 충분한 정보를 제공하지 못했을 수 있습니다. 아마도 스택 추적 및 기타 코드를 추가 할 수 있습니다. – Philio

+0

앱이 언제 충돌합니까? 또한 가능한 경우 logcat을 제공하십시오. – Parnit

+0

널 포인터가 있습니다. RssFeed.java의 109 행을 확인하고 거기에서 무엇을하고 있는지 확인하십시오. – Parnit

답변

0

당신은 avtually 만들 의도에서 활동의 컨텍스트를 제공해야합니다.

그래서 코드는 당신이 필요로하는이

public void registerCallClickBack() { 
     ListView list = (ListView) findViewById(your list); 
     list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View viewClicked, 
        int position, long id) { 
       Intent intent = new Intent(MainActivity.this, Descriptions.class); 
       startActivity(intent); 
      } 
     }); 
    } 

같은과에서 onCreate 방법에 MainActivity에 될 것입니다

내가 말할 것
public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.description); 
      registerCallClickBack(); 
+0

내 목록 ID를 입력 할 때 "rss_list를 변수로 확인할 수 없습니다"라고 표시되지 않습니다. – user2237335

+0

여기에 전체 활동 코드를 게시 할 수 있으며 스택 트레이스를 게시하여 더 많은 정보를 얻을 수 있습니다. –

0

한 가지 onListItemClick의 @Override 태그를 작성하는 것입니다 당신이 그것을 무시하고 있기 때문에. 또한 Descriptions.java가 매니페스트 파일에 선언되어 있습니까?

관련 문제