0

Web サイトからニュース フィードを表示するアプリケーションを作成しようとしているので、入力ストリームを取得し、SAX を使用してドキュメントで解析しますが、この Stream のコーディングの種類を特定できないという SAX 例外を返します。その前に、ウェブサイトのストリームを XML ファイルに手動で配置してファイルを読み取ろうとしましたが、機能しましたが、インターネットから直接ストリーミングするとその例外がスローされ、これが私のコードです:

public final class MyScreen extends MainScreen {
protected static RichTextField RTF = new RichTextField("Plz Wait . . . ",
        Field.FIELD_BOTTOM);
public MyScreen() {
    // Set the displayed title of the screen
    super(Manager.NO_VERTICAL_SCROLL);

    setTitle("Yalla Kora");
    Runnable R = new Runnable();
    R.start();
    add(RTF);

}

private class Runnable extends Thread {

    public Runnable() {
        // TODO Auto-generated constructor stub
        ConnectionFactory factory = new ConnectionFactory();
        ConnectionDescriptor descriptor = factory
                .getConnection("http://www.yallakora.com/arabic/rss.aspx?id=0");

        HttpConnection httpConnection;
        httpConnection = (HttpConnection) descriptor.getConnection();// Connector.open("http://www.yallakora.com/pictures/main//2011/11/El-Masry-807-11-2011-21-56-7.jpg");
        Manager mainManager = getMainManager();
        RichList RL = new RichList(mainManager, true, 2, 1);

        InputStream input;

        try {
            input = httpConnection.openInputStream();

            Document document;

            DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory
                    .newInstance();
            DocumentBuilder docBuilder;
            try {
                docBuilder = docBuilderFactory.newDocumentBuilder();

                docBuilder.isValidating();
                try {
                    document = docBuilder.parse(input);

                    document.getDocumentElement().normalize();

                    NodeList item = document.getElementsByTagName("item");
                    int k = item.getLength();

                    for (int i = 0; i < k; i++) {

                        Node value = item.item(i);
                        NodeList Data = value.getChildNodes();

                        Node title = Data.item(0);
                        Node link = Data.item(1);
                        Node date = Data.item(2);
                        Node discription = Data.item(5);

                        Node Discription = discription.getFirstChild();

                        String s = Discription.getNodeValue();
                        int mm = s.indexOf("'><BR>");
                        int max = s.length();

                        String imagelink = s.substring(0, mm); 
                        String Khabar = s.substring(mm + 6, max);
                        String Date = date.getFirstChild().getNodeValue();
                        String Title = title.getFirstChild().getNodeValue();
                        String Link = link.getFirstChild().getNodeValue();

                        ConnectionFactory factory1 = new ConnectionFactory();
                        ConnectionDescriptor descriptor1 = factory1
                                .getConnection(imagelink);

                        HttpConnection httpConnection1;
                        httpConnection1 = (HttpConnection) descriptor1
                                .getConnection();
                        InputStream input1;

                        input1 = httpConnection1.openInputStream();
                        byte[] bytes = IOUtilities.streamToBytes(input1);
                        Bitmap bitmap = Bitmap.createBitmapFromBytes(bytes,
                                0, -1, 1);

                        ;
                        RL.add(new Object[] { bitmap, Title, Khabar, Date });
                        add(new RichTextField(link.getNodeValue(),
                                Field.NON_FOCUSABLE));

                    }

                    RTF.setText("");
                } catch (SAXException e) {
                    // TODO Auto-generated catch block
                    RTF.setText("SAXException " + e.toString());
                    e.printStackTrace();
                }
            } catch (ParserConfigurationException e) {
                // TODO Auto-generated catch block
                RTF.setText("ParserConfigurationException " + e.toString());
                e.printStackTrace();
            }
        } catch (IOException e) {
            RTF.setText("IOException " + e.toString());
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}}

何か案は ??

4

1 に答える 1

0

このコードを少なくとも 2 つの部分に再構成することをお勧めします。

URL を指定して、その URL に関連付けられたバイトをダウンロードするダウンロード関数を作成します。これにより、接続が開いたり閉じたりし、ダウンロードされたバイト数またはエラー表示のいずれかが返されます。

このダウンロード処理を「関数呼び出し」として使用して、XML バイトをダウンロードします。次に、取得したバイトを解析して、これらをパーサーに直接送ります。データが適切に構築された XML である場合、使用されているエンコーディングを示すヘッダーが含まれているため、パーサーが対処するので心配する必要はありません。

これを解析したら、再度ダウンロード機能を使用して、必要な画像に関連付けられたバイトをダウンロードします。

SAX 処理に関して、次の質問を確認しましたか。

parse-xml-inputstream-in-blackberry-java-application

于 2013-11-01T18:31:14.400 に答える