3

私は、Android ファイル システムにアプリ クリエーターの xml ファイルを作成します。このファイルを XmlPullParser で解析する必要がありましたが、コンパイル中に「変数パーサーが初期化されていない可能性があります」というエラーが発生します。私のコード:

InputStream inputStream = openFileInput("settings.xml");
XmlPullParser parser;
parser.setInput(inputStream, null);

それを修復する方法がわかりません。Intellij IDEA12 と Android 2.3 SDK を使用しています。

4

3 に答える 3

5

私はEclipseを使用していますが、以下のコードがうまくいきました:

以下の最初の行が欠落している可能性があります。

 XmlPullParserFactory xppf = XmlPullParserFactory.newInstance();
 xppf.setNamespaceAware(true); 
 XmlPullParser xpp = xppf.newPullParser();

 File myXML = new File("myXML.xml"); // give proper path            
 FileInputStream fis = new FileInputStream(myXML);

 xpp.setInput(fis, null);
于 2013-03-29T06:20:24.187 に答える
3

日食での作業コードですが、Intellij IDEA12については知りません

このコードを記述して、アセットから xml を開いて取得するか、必要に応じて変更します

try {           

    XmlPullParserFactory     xppf = XmlPullParserFactory.newInstance();
    XmlPullParser  = xppf.newPullParser();                  
    AssetManager manager = context.getResources().getAssets();
    InputStream input = manager.open("createDb.xml");
    xpp.setInput(input, null);
    int type = xpp.getEventType();
    while(type != XmlPullParser.END_DOCUMENT) {
        if(type == XmlPullParser.START_DOCUMENT) {

            Log.d(Tag, "In start document");
        }
        else if(type == XmlPullParser.START_TAG) {
            Log.d(Tag, "In start tag = "+xpp.getName());
        }
        else if(type == XmlPullParser.END_TAG) {
            Log.d(Tag, "In end tag = "+xpp.getName());

        }
        else if(type == XmlPullParser.TEXT) {
            Log.d(Tag, "Have text = "+xpp.getText());
            if(xpp.isWhitespace())
            {

            }
            else
            {
                String strquery = xpp.getText();
                db.execSQL(strquery);
            }

        }
        type = xpp.next();
    }
} 
catch (XmlPullParserException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
于 2013-03-29T06:11:17.590 に答える
1

XmlPullParser のインスタンスをインスタンス化していません。試す:

XmlPullParser parser = Xml.newPullParser();

また、次のように呼び出す必要があります。

parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);

ドキュメントから:

この呼び出しを使用して、名前空間の処理や doctype 宣言の処理など、パーサーの一般的な動作を変更します。このメソッドは、>next または nextToken への最初の呼び出しの前に呼び出す必要があります。それ以外の場合は、例外がスローされます。

例: 名前空間の処理をオンにするために setFeature(FEATURE_PROCESS_NAMESPACES, true) を呼び出します。初期設定は、XML プル >パーサー ファクトリから要求されたプロパティに対応します。何も要求されなかった場合、デフォルトですべての機能が無効になります。

于 2013-03-29T06:52:50.260 に答える