2012-03-23 2 views
2

Я создаю приложение для моего проекта в прошлом году в uni .. Я пытаюсь получить rss-канал. Моя проблема на данный момент заключается в том, что я создал проект (RSSActivity) и получил RSS-каналы работать. Затем я копировал и вставлял все файлы (5 классов и 2 макета) в соответствующие места. Было несколько ошибок: R не может быть найден, но это было легко исправлено путем изменения пакета до пакета проекта (football_app). То, что я делаю, - это нажать кнопку «Новости», и появится новость. Проблема в том, что когда я сейчас нажимаю кнопку «Новости», он говорит: «К сожалению, приложение для футбола остановился».. я попробовал каждый класс в намерениях, и изменил название намерения деятельности надлежащим образом .. кто может мне помочь .. код ниже ...Android-лента новостей

/////////////// HttpFeedSource.java 

    package com.julian.football_app; 

    import java.util.ArrayList; 
    import java.util.List; 

    class HttpFeedSource implements FeedSource { 

     protected static final String URL = "http://www.skysports.com/rss/0,20514,11661,00.xml"; 

     public List<RSSItem> getFeed() { 
      List<RSSItem> itemList = new ArrayList<RSSItem>(); 

      NewsParser parser = new NewsParser(URL); 
      parser.parse(); 
      NewsParser.RssFeed feed = parser.getFeed(); 

      for (NewsParser.Item i : feed.getItems()) { 
       itemList.add(new RSSItem(i.getUrl(), i.getTitle(), i.getDescription(), i.getimageUrl())); 
      } 
      return itemList; 
     } 

    } 


    ////////////////////// FeedSource.java 

     package com.julian.football_app; 

    import java.util.List; 

    interface FeedSource { 

     List<RSSItem> getFeed(); 

} 






<code> 

//////// ////////////////////////////////////////////////// ///////////////////////////////// //MockFeedSource.java

package com.julian.football_app;

импорт java.util.ArrayList; import java.util.List;

класс MockFeedSource реализует FeedSource {

public List<RSSItem> getFeed() { 

    RSSItem item; 
    final List<RSSItem> items = new ArrayList<RSSItem>(); 
    item = new RSSItem("Android Workshop er gøy", "http://www.ap.no", " this is the desc", ""); 
    items.add(item); 
    item = new RSSItem("Android Workshop er gøy 2", "http://www.ap.no", "this is the desc", ""); 
    items.add(item); 
    item = new RSSItem("Android Workshop er gøy3", "http://www.ap.no", "this is the desc", ""); 
    items.add(item); 
    return items; 

} 

}

</code> 



/////////////////////////////////////////////////////////////////////////////////////////// NewsParser.java 

    package com.julian.football_app; 

    import org.xml.sax.Attributes; 
    import org.xml.sax.InputSource; 
    import org.xml.sax.helpers.DefaultHandler; 
    import javax.xml.parsers.SAXParser; 
    import javax.xml.parsers.SAXParserFactory; 
    import java.io.InputStream; 
    import java.net.URL; 
    import java.text.ParseException; 
    import java.text.SimpleDateFormat; 
    import java.util.ArrayList; 
    import java.util.Date; 
    import java.util.HashMap; 
    import java.util.Locale; 


    class NewsParser extends DefaultHandler { 

     public static SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.ENGLISH); 
     private String urlString; 
     private RssFeed rssFeed; 
     private StringBuilder text; 
     private Item item; 
     private boolean imgStatus; 

     public NewsParser(String url) { 
      this.urlString = url; 
      this.text = new StringBuilder(); 
     } 

     public void parse() { 

      InputStream urlInputStream = null; 
      SAXParserFactory spf; 
      SAXParser sp; 

      try { 
       URL url = new URL(this.urlString); 
       urlInputStream = url.openConnection().getInputStream(); 
       InputSource is = new InputSource(urlInputStream); 
       is.setEncoding("ISO-8859-1"); 

       spf = SAXParserFactory.newInstance(); 
       if (spf != null) { 
        sp = spf.newSAXParser(); 
        sp.parse(is, this); 
       } 
      } catch (Exception e) { 
       throw new RuntimeException(e); 
      } finally { 
       try { 
        if (urlInputStream != null) urlInputStream.close(); 
       } catch (Exception e) { 
        throw new RuntimeException(e); 
       } 
      } 
     } 

     public RssFeed getFeed() { 
      return (this.rssFeed); 
     } 

     public void startElement(String uri, String localName, String qName, 
           Attributes attributes) { 
      if (qName.equalsIgnoreCase("channel")) 
       this.rssFeed = new RssFeed(); 
      else if (qName.equalsIgnoreCase("item") && (this.rssFeed != null)) { 
       this.item = new Item(); 
       this.rssFeed.addItem(this.item); 
      } else if (qName.equalsIgnoreCase("image") && (this.rssFeed != null)) 
       this.imgStatus = true; 
     } 

     public void endElement(String uri, String localName, String qName) { 
      if (this.rssFeed == null) 
       return; 

      if (qName.equalsIgnoreCase("item")) 
       this.item = null; 

      else if (qName.equalsIgnoreCase("image")) 
       this.imgStatus = false; 

      else if (qName.equalsIgnoreCase("title")) { 
       if (this.item != null) this.item.title = this.text.toString().trim(); 
       else if (this.imgStatus) this.rssFeed.imageTitle = this.text.toString().trim(); 
       else this.rssFeed.title = this.text.toString().trim(); 
      } else if (qName.equalsIgnoreCase("link")) { 
       if (this.item != null) this.item.link = this.text.toString().trim(); 
       else if (this.imgStatus) this.rssFeed.imageLink = this.text.toString().trim(); 
       else this.rssFeed.link = this.text.toString().trim(); 
      } else if (qName.equalsIgnoreCase("description")) { 
       if (this.item != null) this.item.description = this.text.toString().trim(); 
       else this.rssFeed.description = this.text.toString().trim(); 
      } else if (qName.equalsIgnoreCase("url") && this.imgStatus) 
       this.rssFeed.imageUrl = this.text.toString().trim(); 

      else if (qName.equalsIgnoreCase("language")) 
       this.rssFeed.language = this.text.toString().trim(); 

      else if (qName.equalsIgnoreCase("generator")) 
       this.rssFeed.generator = this.text.toString().trim(); 

      else if (qName.equalsIgnoreCase("copyright")) 
       this.rssFeed.copyright = this.text.toString().trim(); 

      else if (qName.equalsIgnoreCase("pubDate") && (this.item != null)) { 
       try { 
        this.item.pubDate = sdf.parse(this.text.toString().trim()); 
       } catch (ParseException e) { 
        throw new RuntimeException(); 
       } 
      } else if (qName.equalsIgnoreCase("category") && (this.item != null)) 
       this.rssFeed.addItem(this.text.toString().trim(), this.item); 

      this.text.setLength(0); 
     } 

     public void characters(char[] ch, int start, int length) { 
      this.text.append(ch, start, length); 
     } 

     public static class RssFeed { 
      public String title; 
      public String description; 
      public String link; 
      public String language; 
      public String generator; 
      public String copyright; 
      public String imageUrl; 
      public String imageTitle; 
      public String imageLink; 

      private ArrayList<Item> items; 
      private HashMap<String, ArrayList<Item>> category; 

      public void addItem(Item item) { 
       if (this.items == null) 
        this.items = new ArrayList<Item>(); 
       this.items.add(item); 
      } 

      public void addItem(String category, Item item) { 
       if (this.category == null) 
        this.category = new HashMap<String, ArrayList<Item>>(); 
       if (!this.category.containsKey(category)) 
        this.category.put(category, new ArrayList<Item>()); 
       this.category.get(category).add(item); 
      } 

      public ArrayList<Item> getItems() { 
       return items; 
      } 
     } 

     public static class Item implements Comparable<Item> { 
      public String title; 
      public String description; 
      public String link; 
      public Date pubDate; 
      private String url; 
      private String imageUrl; 

      public String toString() { 
       return (this.title + ": "); 
      } 

      public int compareTo(Item o) { 
       return (int) (o.pubDate.getTime() - pubDate.getTime()); 
      } 

      public Date getPubDate() { 
       return pubDate; 
      } 

      public String getDescription() { 
       return description; 
      } 


      public String getTitle() { 
       return title; 
      } 

      public String getUrl() { 
       return url; 
      } 

      public String getimageUrl() { 
       return imageUrl; 
      } 


     } 
    } 





package com.julian.football_app; 

import com.julian.football_app.R; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.ListView; 

public class RSSActivity extends Activity { 
    /** 
    * Called when the activity is first created. 
    */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main2); 

     ListView rssItemList = (ListView) findViewById(R.id.rssListview); 
     FeedSource feedSource = new HttpFeedSource(); 
     RSSItemAdapter adapter = new RSSItemAdapter(this, R.layout.rssitem, feedSource.getFeed()); 
     rssItemList.setAdapter(adapter); 
    } 


} 

/////////RssItem 

    package com.julian.football_app; 

    import java.util.Date; 

    class RSSItem { 

     private String url; 
     private String title; 
     private String description; 
     private String imageUrl; 
     private Date pubDate; 

     public RSSItem() { 
     } 

     public RSSItem(String url, String title, String description, String imageUrl) { 
      this.url = url; 
      this.title = title; 
      this.description = description; 
      this.imageUrl = imageUrl; 

     } 


     public String getUrl() { 
      return url; 
     } 

     public void setUrl(String url) { 
      this.url = url; 
     } 

     public String getTitle() { 
      return title; 
     } 

     public void setTitle(String title) { 
      this.title = title; 
     } 

     public String getDescription() { 
      return description; 
     } 

     public void setDesc(String description) { 
      this.description = description; 
     } 

     public void setImageUrl(String imageUrl) { 
      this.imageUrl = imageUrl; 
     } 
     public String getimageUrl() { 
      return imageUrl; 
     } 
     public void setpubDate(Date pubDate){ 
      this.pubDate = pubDate; 
     } 
     public Date getpubDate(){ 
      return pubDate; 
     } 

    } 

////////////////// RssItemAdaptor 

    package com.julian.football_app; 

    import android.content.Context; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.ArrayAdapter; 
    import android.widget.TextView; 
    import java.util.List; 

    import com.julian.football_app.R; 

    class RSSItemAdapter extends ArrayAdapter<RSSItem> { 

     private final Context context; 

     public RSSItemAdapter(Context context, int textViewResourceId, 
       List<RSSItem> items) { 
      super(context, textViewResourceId, items); 
      this.context = context; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View v = convertView; 
      if (v == null) { 
       LayoutInflater vi = (LayoutInflater) context 
         .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       v = vi.inflate(R.layout.rssitem, null); 
      } 
      final RSSItem item = getItem(position); 
      TextView title = (TextView) v.findViewById(R.id.title); 
      TextView desc = (TextView) v.findViewById(R.id.description); 
      TextView url = (TextView) v.findViewById(R.id.url); 

      // this is what is viewed 
      title.setText(item.getTitle()); 
      desc.setText(item.getDescription()); 
      url.setText(item.getimageUrl()); 
      return v; 

     } 

    } 

///This is the button i want to display the Rss Feed 
package com.julian.football_app; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 

    public class Menu extends Activity { 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      // TODO Auto-generated method stub 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.menu); 

      //setting the buttons 
      Button btnews1 = (Button) findViewById(R.id.news_1); 
      btnews1.setOnClickListener(new View.OnClickListener() { 

       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        Intent news1intent = new Intent(Menu.this, news_1.class); 
        Menu.this.startActivity(news1intent); 
       } 
      }); 

Спасибо за глядя на мой код ... Было бы весьма признателен, если кто-то может помочь мне :) (я знаю его говорит news_1.class в намерении .. его единственное, потому что я все испробовал и вернулся в исходное состояние ..)

Это ошибки, которые появляются в LogCat:

03-23 13:54:16.118: E/AndroidRuntime(553): FATAL EXCEPTION: main 
03-23 13:54:16.118: E/AndroidRuntime(553): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1508) 
03-23 13:54:16.118: E/AndroidRuntime(553): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1384) 
03-23 13:54:16.118: E/AndroidRuntime(553): at android.app.Activity.startActivityForResult(Activity.java:3190) 
03-23 13:54:16.118: E/AndroidRuntime(553): at android.app.Activity.startActivity(Activity.java:3297) 
03-23 13:54:16.118: E/AndroidRuntime(553): at com.julian.football_app.Menu$1.onClick(Menu.java:24) 
03-23 13:54:16.118: E/AndroidRuntime(553): at android.view.View.performClick(View.java:3460) 
03-23 13:54:16.118: E/AndroidRuntime(553): at android.view.View$PerformClick.run(View.java:13955) 
03-23 13:54:16.118: E/AndroidRuntime(553): at android.os.Handler.handleCallback(Handler.java:605) 
03-23 13:54:16.118: E/AndroidRuntime(553): at android.os.Handler.dispatchMessage(Handler.java:92) 
03-23 13:54:16.118: E/AndroidRuntime(553): at android.os.Looper.loop(Looper.java:137) 
03-23 13:54:16.118: E/AndroidRuntime(553): at android.app.ActivityThread.main(ActivityThread.java:4340) 
03-23 13:54:16.118: E/AndroidRuntime(553): at java.lang.reflect.Method.invokeNative(Native Method) 
03-23 13:54:16.118: E/AndroidRuntime(553): at java.lang.reflect.Method.invoke(Method.java:511) 
03-23 13:54:16.118: E/AndroidRuntime(553): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
03-23 13:54:16.118: E/AndroidRuntime(553): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
03-23 13:54:16.118: E/AndroidRuntime(553): at dalvik.system.NativeStart.main(Native Method) 
+0

Итак ... где именно эта новость? И * если * это где угодно, не забыли ли вы добавить его в свой манифест? Как предложено ниже: посмотрите в LogCat для деталей исключения - это расскажет вам больше о происхождении проблемы, с которой вы столкнулись. –

ответ

2

Похоже, приложение испытывает исключение. Чтобы найти причину, вам необходимо использовать LogCat, чтобы просмотреть сведения об исключении, которые покажут вам, где в вашем коде есть проблема.

+0

Ошибок не возникает в LogCat, который является странным .. было бы полезно, если бы я отправил ссылку на мой Dropbox с проектом в нем ?? я мог бы также отправить рабочий проект RSS в ту же папку? – julian9876

+0

Вы сказали, что видите ошибку «К сожалению, приложение для футбола остановилось». В этом случае на выходе LogCat будут детали исключения. Я рад ответить на вопросы о StackOverflow, но я не могу отлаживать ваше приложение для вас. –

+0

ok Есть несколько lol: 03-23 ​​13: 54: 16.118: E/AndroidRuntime (553): FATAL EXCEPTION: main – julian9876

0

Посмотрите, как приложение идет с рельсов прямо вокруг:

E/AndroidRuntime(553): at android.app.Activity.startActivity(Activity.java:3297) 03-23 13:54:16.118: 
E/AndroidRuntime(553): at com.julian.football_app.Menu$1.onClick(Menu.java:24) 03-23 13:54:16.118: 

Мое чувство это не про RSS на всех. Я думаю, вам нужно исправить навигацию Intent между действиями в вашем приложении. Вы можете попытаться заблокировать все действия из своей деятельности (закомментируйте интересные фрагменты onCreate() или что-то еще) и убедитесь, что вы можете плавно перемещаться между действиями. Затем снова включите действия и убедитесь, что они не взорвутся, когда вы вводите их.

См. Также комментарий MH о проверке того, что все действия находятся в вашем манифесте.

И вынимают эту линию, которая говорит:

import com.julian.football_app.R; 

Если вы не можете получить код для компиляции без включения .R, то вы делаете что-то неправильно. Попробуйте сохранить все исходные файлы, удалив содержимое вашего каталога gen и выбрав Project > Clean.