Rss Reader. Title wird abgeschnitten.

  • Antworten:2
Julian B
  • Forum-Beiträge: 12

08.07.2013, 09:10:37 via Website

Hallo ich habe ein kleinen Rss Reader gemacht.

Nun habe ich aber ein Problem ich denke das es evtl. an HTML liegt im Title das dieser abgeschnitten wird.

Diese
1<title>Non Farm Payrolls &amp; US Unemployment Rate</title>

Ist z.B ein Title der abgeschnitten wird ich bekomme nur US Unemployment Rate das „Non Farm Payrolls &amp;“ wird abgeschnitte.

Jemand eine Idee warum er das macht?
Das HTML Entities sollte sowas ja eig verhindern, bzw könnte das an dem ; liegen?

— geändert am 08.07.2013, 09:42:32

Antworten
Julian B
  • Forum-Beiträge: 12

09.07.2013, 21:20:56 via Website

Hi sorry das es so lange gedauert hat.

Hier der Handler
1package forex.app;
2
3import org.xml.sax.Attributes;
4import org.xml.sax.SAXException;
5import org.xml.sax.helpers.DefaultHandler;
6
7import android.content.Context;
8import android.util.Log;
9
10/**
11 */
12public class Handler extends DefaultHandler{
13
14
15 /**
16 * Konstante für das Entry - Element innerhalb der XML
17 */
18 final private String ITEM = new String("item");
19 /**
20 * Konstante für das Title - Element innerhalb der XML
21 */
22 final private String TITLE = new String("title");
23 /**
24 * Konstante für das Link - Element innerhalb der XML
25 */
26 final private String LINK = new String("link");
27
28 final private String CONTENT = new String("content:encoded");
29 /**
30 * Konstante für das Attribute des Link - Elemente innerhalb der XMLl
31 */
32 final private String LINK_ATTR_HREF = new String("href");
33
34 /**
35 * Wahrheitswert der aussagt ob das Entry-Element gerade geparst wird
36 */
37 private boolean entryBoolean;
38 /**
39 * Wahrheitswert der aussagt ob das Title-Element gerade geparst wird
40 */
41 private boolean titleBoolean;
42 /**
43 * Wahrheitswert der aussagt ob das Title-Element gerade geparst wird
44 */
45 private boolean contentBoolean;
46 /**
47 * Text zwischen dem Element Titel
48 */
49 private String contentTitle;
50
51 private String contentText;
52 /**
53 * Speichert den Inhalt des RSS Feeds
54 */
55 private Content myContent;
56
57 public EntryDataSource dataSource;
58
59 /**
60 * Konstruktor
61 * @param content - Speicher für den Inhalt des RSS Feeds
62 */
63 public Handler(Content content,Context context){
64 myContent = content;
65 dataSource = new EntryDataSource(context);
66 }
67
68
69 //wird aufgerufen wenn der Parser den Anfag des Dokumentes erreicht
70 @Override
71 public void startDocument() throws SAXException {
72
73 entryBoolean = false;
74 titleBoolean = false;
75 contentTitle = "";
76 contentText = "";
77
78
79 }
80
81 //wird aufgerufen wenn der Parser das Ende des Dokumentes erreicht
82 @Override
83 public void endDocument() throws SAXException {
84
85 }
86
87 //wird aufgerufen wenn der Parser das startTag eines Elementes erreicht
88 @Override
89 public void startElement(String namespaceURI, String localName,String qName, Attributes atts) throws SAXException {
90
91
92 if(qName.equalsIgnoreCase(this.ITEM)){
93 this.entryBoolean = true;
94 }
95 else if(qName.equalsIgnoreCase(this.TITLE)){
96 this.titleBoolean = true;
97 }
98 else if(qName.equalsIgnoreCase(this.CONTENT)){
99 this.contentBoolean = true;
100 }
101 else if(qName.equalsIgnoreCase(this.LINK)){
102
103 if(this.entryBoolean){
104 //nur Links innerhalb des entry Elements werden gespeichert
105 //if(this.LINK_ATTR_HREF == "") {
106 // Log.i("Das ist ein Test", atts.getValue(this.LINK_ATTR_HREF));
107 //}
108 //Attribute speichern
109 //myContent.setUrl(atts.getValue(this.LINK_ATTR_HREF));
110 }
111 }
112 }
113
114 //wird aufgerufen wenn das endTag eines Elementes erreicht
115 @Override
116 public void endElement(String namespaceURI, String localName, String qName)throws SAXException {
117
118 if(qName.equalsIgnoreCase(this.ITEM)){
119 this.entryBoolean = false;
120 }
121 else if(qName.equalsIgnoreCase(this.TITLE)){
122 this.titleBoolean = false;
123 }
124 else if(qName.equalsIgnoreCase(this.CONTENT)){
125
126 if(this.entryBoolean){
127
128 this.contentBoolean = false;
129
130 Log.i(Handler.class.getSimpleName(), this.contentText);
131
132 try {
133 dataSource.open();
134 dataSource.createEntry(this.contentTitle,this.contentText);
135 dataSource.close();
136 }catch (Exception e){
137 Log.e(Handler.class.getSimpleName(), "ERROR_123 :" + e.getMessage() + e.getStackTrace());
138 }
139
140 //Speichern des Titels
141 myContent.setTitel(this.contentTitle);
142
143 myContent.setConnten(this.contentText);
144
145 //Zwischenspeicher wird "gelöscht"
146 this.contentTitle = "";
147 this.contentText = "";
148 }
149 }
150 }
151
152 //wird aufgerufen für den Content zwischen startTag und endTag
153 @Override
154 public void characters(char ch[], int start, int length)throws SAXException {
155
156 if(this.entryBoolean){
157
158 //nur Title innerhalb des Entry Element werden ausgelesen
159 if(this.titleBoolean){
160 this.contentTitle = new String(ch, start, length);
161 }
162
163 if(this.contentBoolean) {
164 this.contentText = new String(ch, start, length);
165 }
166
167 }
168 }
169
170}

Antworten