2013-05-09 2 views
0

Simple이라는 프레임 워크를 사용하고 있습니다.이 프레임 워크는 직렬화 및 deser에 매우 유용합니다. XML 콘텐츠. 그러나 XML 파일을 객체에 직렬화 할 수 없습니다. 출력 객체는 정보로 채워야하지만 Null Pointer Exception을 얻습니다. 내가 고해상도/XML /라는 startingdata.xml에서 파일이간단한 프레임 워크를 사용한 XML 직렬화

InputStream is = getResources().openRawResource(R.xml.startingdata); 
    Serializer ser = new Persister(); 
    Data data = ser.read(Data.class, is); 

:

여기 내 자바 코드입니다. 데이터를 "데이터"개체로 열거하려고합니다. 그러나 데이터 객체와 관련된 NullPointerException이 발생합니다.

<data> 
<categories> 
    <category>Inbox</category> 
    <category>Private</category> 
    <category>Work</category> 
    <category>Business</category> 
</categories> 

<todos> 
    <todo> 
     <id>1</id> 
     <text>Explore the app!</text> 
    </todo> 

    <todo> 
     <id>2</id> 
     <text>Add more todos!</text> 
     <date>2013-05-09 12:21:55 CET</date> 
    </todo> 
</todos> 

내가 XML 모델 클래스가 확인 생각, 거기에 아무 문제가 그들과 함께,하지만 당신이 그들을 볼 필요하면 내가 그들을 게시 할 수 있습니다 : 여기

는 startingdata.xml입니다 .

Data.java

@Root 
public class Data { 

@ElementList 
public List<Category> categories; 

@ElementList 
public List<ToDo> todos; 

} 

@Element(name="todo") 
public class ToDo { 

@Element(required=true) 
public String id; 

@Element(required=true) 
public String text; 

@Element(required=false) 
public Date date; 

} 

@Element(name="category") 
public class Category { 

    @Element(required=true) 
    public String text; 

} 

내가 생성 된 데이터 객체가 생성 된 경우 확인하기 위해 토스트를 사용하고 있습니다 :

여기에 모델 클래스입니다.

05-09 14:13:38.407: E/AndroidRuntime(9246): FATAL EXCEPTION: main 
05-09 14:13:38.407: E/AndroidRuntime(9246): java.lang.RuntimeException: Unable to start  activity ComponentInfo{com.todo.wanttodo/com.todo.wanttodo.MainActivity}: java.lang.NullPointerException 
05-09 14:13:38.407: E/AndroidRuntime(9246):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
05-09 14:13:38.407: E/AndroidRuntime(9246):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
05-09 14:13:38.407: E/AndroidRuntime(9246):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
05-09 14:13:38.407: E/AndroidRuntime(9246):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
05-09 14:13:38.407: E/AndroidRuntime(9246):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-09 14:13:38.407: E/AndroidRuntime(9246):  at android.os.Looper.loop(Looper.java:137) 
05-09 14:13:38.407: E/AndroidRuntime(9246):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
05-09 14:13:38.407: E/AndroidRuntime(9246):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-09 14:13:38.407: E/AndroidRuntime(9246):  at java.lang.reflect.Method.invoke(Method.java:511) 
05-09 14:13:38.407: E/AndroidRuntime(9246):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
05-09 14:13:38.407: E/AndroidRuntime(9246):  at  com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
05-09 14:13:38.407: E/AndroidRuntime(9246):  at dalvik.system.NativeStart.main(Native  Method) 
05-09 14:13:38.407: E/AndroidRuntime(9246): Caused by: java.lang.NullPointerException 
05-09 14:13:38.407: E/AndroidRuntime(9246):  at com.todo.wanttodo.MainActivity.onCreate(MainActivity.java:77) 
05-09 14:13:38.407: E/AndroidRuntime(9246):  at android.app.Activity.performCreate(Activity.java:5104) 
05-09 14:13:38.407: E/AndroidRuntime(9246):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
05-09 14:13:38.407: E/AndroidRuntime(9246):  at   android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
05-09 14:13:38.407: E/AndroidRuntime(9246):  ... 11 more 

가 사전에 감사합니다

Toast toast = Toast.makeText(getApplicationContext(), data.toString(), Toast.LENGTH_LONG); 
     toast.show(); 

다음은 전체 스택 추적입니다!

+0

스택 추적 및 모델 클래스가 실제로 도움이 될 것입니다. –

+0

필요한 정보를 추가했습니다. 코멘트 주셔서 감사합니다! –

+0

http://stackoverflow.com/questions/4488654/using-simple-xml-serialization-to-load-data-from-res-raw-on-android?rq=1 –

답변

0

startingdata.xml 파일에 대한 확신이 있습니까?

<?xml version="1.0" encoding="UTF-8"?> 
<data> 
    <categories> 
     <category>Inbox</category> 
     <category>Private</category> 
     <category>Work</category> 
     <category>Business</category> 
    </categories> 

    <todos> 
     <todo> 
      <id>1</id> 
      <text>Explore the app!</text> 
     </todo> 

     <todo> 
      <id>2</id> 
      <text>Add more todos!</text> 
      <date>2013-05-09 12:21:55 CET</date> 
     </todo> 
    </todos> 
</data> 

당신은 XmlPullParser를 사용하여 다른 방법을 시도 할 수 있습니다 : android - training, android - reference

+0

제안 해 주셔서 감사합니다. 질문에 모델 클래스와 전체 스택 추적을 추가했습니다. 어쩌면 당신은 뭔가 잘못 볼 수있을 것입니다. –

0

내 프로젝트에서, 내 DAO 클래스에 @Default을 설정합니다.

@Root(name="data") 
@Default(value = DefaultType.FIELD, required = false) 
public class Data { 

    @ElementList 
    public List<Category> categories; 

    @ElementList 
    public List<ToDo> todos; 

    .... 

}