2013-03-29 1 views
3

Android 파일 시스템에 내 app creater xml 파일이 있습니다. XmlPullParser를 사용하여이 파일을 분석했지만 컴파일 오류가 발생합니다. "변수 파서가 초기화되지 않았을 수 있습니다." 내 코드 :XmlPullParser 파일 시스템에서 파일 가져 오기

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

어떻게 수리해야 할 지 모르겠다. Intellij IDEA12 및 Android 2.3 SDK를 사용합니다. eclipes에서

+0

내 코드 에서처럼 페이저를 먼저 초기화하십시오. – Unknown

답변

2

그것의 작동 코드를하지만 내가 이클립스와를 사용하여 필요

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(); 
} 
+0

코드가 작동하는지 여부는 코드가 IDE가 아닌 전화로 실행되기 때문에 사용중인 IDE에 의존하지 않아야합니다. – AgentKnopf

5

에 따라 열고 자산 에서 XML을 얻거나 수정할 수 IDEA12

쓰기를 IntelliJ에 대해이 코드를 잘 모릅니다 아래 코드가 작동했습니다.

다음 행이 누락되었을 수 있습니다.

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); 
+0

일찍 시도 했으므로 작동합니다. 하지만 XmlPullParser 만 사용하여이 작업을 수행하려고합니다. 할 수 있을까요? –

+0

XmlPullParser를 설치해야 사용할 수 있습니다. 그렇게하려면 XmlPullParserFactory가 필요합니다. 내 코드는 나를 위해 작동합니다. 그리고 이것이 제가 할 수있는 방법입니다. 필요한 경우 Google 문서를 확인할 수 있습니다. – SKK

1

XmlPullParser의 인스턴스를 인스턴스화하지 않습니다. 시도 :

parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false); 

를 문서에서 :

XmlPullParser parser = Xml.newPullParser(); 

는 또한, 당신이 호출 할 필요가 같은 공간 처리로, 파서의 일반적인 동작을 변경할

사용이 호출> 또는 doctype 선언 처리. 이 메서드는> next 또는 nextToken을 처음 호출하기 전에 호출해야합니다. 그렇지 않으면 예외가 발생합니다.

예 : 네임 스페이스> 처리를 켜려면 setFeature (FEATURE_PROCESS_NAMESPACES, true)를 호출하십시오. 초기 설정은 XML Pull> Parser 팩토리에서 요청한 속성에 해당합니다. 아무 것도 요청하지 않으면 기본적으로 모든 기능이 비활성화됩니다.

+0

아니, 친구, 그것 없이는 일하고있다. –

+0

문제가 해결되었다고 말씀 하시겠습니까? 어떤 솔루션을 사용했는지 말할 수 있습니까? – croyd