1。基于
我的代码基于此教程: https://www.youtube.com/watch?v=40mYDQkK44A https://github.com/FoamyGuy/StackSites
因此,如果您正在尝试了解正在发生的事情,那么只需查看整个代码,我的内容并未发生太大变化。
2。我的XML
<event>
<name>Reunion</name>
<date>Freitag 07.07.2017 </date>
<link>EVENT LINK</link>
<about>Über eine Woche ist es her, seit .... ÄÜÖ :-) </about>
<image>IMAGE LINK</image>
</event>
第3。下载XML
URLConnection ucon = url.openConnection();
/************************************************
* Define InputStreams to read from the URLConnection.
************************************************/
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
/************************************************
* Define OutputStreams to write to our file.
************************************************/
BufferedOutputStream bos = new BufferedOutputStream(fos);
byte data[] = new byte[1024];
//long total = 0;
int count;
//loop and read the current chunk
while ((count = bis.read(data)) != -1) {
//keep track of size for progress.
//total += count;
//write this chunk
bos.write(data, 0, count);
}
//Have to call flush or the file can get corrupted.
bos.flush();
bos.close();
4。阅读XML
// Get our factory and PullParser
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xpp = factory.newPullParser();
// Open up InputStream and Reader of our file.
FileInputStream fis = ctx.openFileInput("Events.xml");
BufferedReader reader = new BufferedReader(new InputStreamReader(fis,"UTF-8"));
// point the parser to our file.
xpp.setInput(reader);
// get initial eventType
int eventType = xpp.getEventType();
// Loop through pull events until we reach END_DOCUMENT
while (eventType != XmlPullParser.END_DOCUMENT) {
// Get the current tag
String tagname = xpp.getName();
// React to different event types appropriately
switch (eventType) {
case XmlPullParser.START_TAG:
if (tagname.equalsIgnoreCase(KEY_SITE)) {
// If we are starting a new <site> block we need
//a new StackSite object to represent it
curStackSite = new StackSite();
}
break;
case XmlPullParser.TEXT:
//grab the current text so we can use it in END_TAG event
curText = xpp.getText();
break;
case XmlPullParser.END_TAG:
if (tagname.equalsIgnoreCase(KEY_EVENT)) {
// if </event> then we are done with current Event
// add it to the list.
stackSites.add(curStackSite);
} else if (tagname.equalsIgnoreCase(KEY_NAME)) {
// if </name> use setName() on curSite
curStackSite.setName(curText);
} else if (tagname.equalsIgnoreCase(KEY_LINK)) {
// if </link> use setLink() on curSite
curStackSite.setLink(curText);
} else if (tagname.equalsIgnoreCase(KEY_ABOUT)) {
// if </about> use setAbout() on curSite
curStackSite.setAbout(curText);
} else if (tagname.equalsIgnoreCase(KEY_IMAGE_URL)) {
// if </image> use setImgUrl() on curSite
curStackSite.setImgUrl(curText);
} else if (tagname.equalsIgnoreCase(KEY_DATE)) {
// if </date> use setDate() on curSite
curStackSite.setDate(curText);
}
break;
5。我的问题
除了在TextView中显示“Ö,Ä,Ü”之类的字符外,本代码中的所有内容基本上都应该正常工作。 TextView总是给我一个“?”而不是“Ü,Ä,..”。所以我试着用谷歌喂给我的每一种方式解决这个问题,但我无法解决这个问题。
我尝试更改缓冲区“byte data [] = new byte [1024];”更大的东西,而不是BufferedInputStream我尝试了InputStreamReader ecc。
我观察到的是:在“ANSI”-Code中使用记事本保存我的XML工作正常,用“UTF-8”保存它根本不起作用,我从读者那里得不到任何东西。
我还想展示一些表情符号,但这是问题的第二部分。首先显示“Ü,Ä,Ö”会更重要。
显示/布局
这是我显示页面的XML文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:padding="10dp"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:background="@drawable/schalt2"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<ImageView
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/iconImg"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/event_title"
android:textColor="@android:color/white"
android:padding="4dp"
android:textStyle="bold"
android:textSize="22sp"
android:layout_below="@id/iconImg"
/>
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/event_date"
android:textStyle="bold"
android:textSize="14sp"
android:padding="5dp"
android:textColor="@android:color/white"
android:layout_below="@id/event_title"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/eventdescriptlong"
android:layout_below="@id/event_title"
android:padding="28dp"
android:textColor="@android:color/white"
/>
因此,如果我尝试使用像这样的TextView:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/eventdescriptlong"
android:layout_below="@id/event_title"
android:text="ÜÖÄ"
android:textColor="@android:color/white"
/>
它得到了正确的显示。
答案 0 :(得分:0)
解决了,问题如下:
将文件保存在UTF-8字符集中,在本地解析它会在XML前面添加这3个字节
https://i.stack.imgur.com/c7uqI.png[enter此处的图片说明] [1]
所以你绝对需要添加这一行: fis.skip(3);
希望这可以帮助你们:)