0

ASP.NET Web API サーバーからの JASON 応答を最善の方法で Java クラスにマップする方法を理解するのに少し苦労しています。

このコードを使用して、サーバー データを要求します。

ClientResource res = new ClientResource(ADDRESS_URL + "/exed/students/");
               Representation rep = res.get();
               try {
                   Log.d(TAG, rep.getText());
               } catch (IOException e) {
                   Log.d(TAG, e.getMessage());
               }

この JSON 表現を正常に取得できます。

{"$id":"1","StudentId":1,"RowVersion":"AAAAAAAAB9M=","User":{"$id":"2","UserId":1,"Username":"1","Password":"1","UserTypeId":1,"FirstName":"George","LastName":"Taskos","RowVersion":"AAAAAAAAB9I=","Student":{"$ref":"1"},"Teacher":null,"UserType":null}}

これで、これらの Java クラスができました。

ユーザー。

public class User implements Serializable {

    // Private fields
    //
    private int userId;
    private String username;
    private String password;
    private int userTypeId;
    private String firstName;
    private String lastName;
    private String userType;
    private Timestamp rowVersion;

    // Setters
    // Getters....
 }

そして学生。

public class Student extends User implements Serializable {

    // Private fields
    private List<ClassType> classes;
    private List<ExamTaken> examsTaken;
    private Timestamp rowVersionStudent;
}

表現をオブジェクトに取得する方法。私は非常に多くのことを見てきたので、解決策を得るために今とてもめまいがしていると思います. 私はJavaサーバー側などに精通していないので、チュートリアルで読んだものに不満を感じるのはそのためだと思います.サイトには多くのものが欠けているか、明確に説明されていないと思います.

少なくとも値を取得して、SQLiteカーソルで行うようにオブジェクトに取得する簡単な例。応答からの逆シリアル化も本当に素晴らしいでしょう:)

[編集]

生の提案の後、私はこのコードになりました。

ClientResource res = new ClientResource(ADDRESS_URL + "/exed/students/");
               Representation rep = res.get();

               try {
                   JSONObject response = new JSONObject(rep.getText());
                   Log.d(TAG, rep.getText());
                   JSONObject user = response.getJSONObject("User");
                   Log.d(TAG, "User: " + user.toString());
                   JSONObject student = response.getJSONObject("Student");
                   Log.d(TAG, "Student: " + student.toString());

                   Log.d(TAG, "FirstName: " + user.getString("FirstName"));
               } catch (Exception e) {
                   Log.d(TAG, "Exception: " + e.getMessage());
               }

しかし、次のメッセージで例外が発生します: Exception: println needs a message

Stacktrace はこれを出力します: Exception: android.util.Log.println_native(Native Method)

未処理の例外は次のとおりです。

03-06 13:07:14.668: ERROR/AndroidRuntime(25353): FATAL EXCEPTION: Thread-13908
        java.lang.NullPointerException: println needs a message
        at android.util.Log.println_native(Native Method)
        at android.util.Log.d(Log.java:155)
        at com.tech.ed.data.access.WebServiceRepository$1.run(WebServiceRepository.java:74)
        at java.lang.Thread.run(Thread.java:856)

意味がよくわかりません!

ありがとうございました。

4

1 に答える 1

1

一連の JSONObjects と文字列があるように見えます。結果全体に対して 1 つの JSONObject を作成するだけです

JSONObject response = new JSONObject(representation);

次に、ユーザー オブジェクトと生徒オブジェクトを抽出します

JSONObject user = response.getJSONObject("User");
JSONObject student = response.getJSONObject("Student");

次に、ネストされた文字列、int、または対応するオブジェクトから何でも取得できます。

String firstName = user.getString("FirstName");
于 2013-03-05T15:21:08.140 に答える