1

ウィキペディアからテキストを取得してAndroidアプリで使用しようとしています。私はJavaを使用しています。私が最初にしたいのは、特定の記事からセクションを取得してユーザーに表示し、ユーザーが1つのセクションをクリックすると、別のhttpリクエストでセクションテキストを取得することです。

したがって、2つの要求は次のとおりです。

http://en.wikipedia.org/w/api.php?format=json&action=parse&page=Valencia_Cathedral&prop=sections

そしてこれ:

http://en.wikipedia.org/w/api.php?format=json&action=parse&page=Valencia_Cathedral&prop=text§ion=1

私の質問は、情報を格納し、それを使用してこれらのクラスに変換するために、どのような種類のJavaオブジェクトを作成する必要があるかということ.fromJSON()です。

@NathanZのおかげで、次の2つのクラスを作成しました。

public class WikiResponseSections {
    String title;
    List<Section> sections;
}

public class Section {
        int toclevel;
        String level;
        String line;
        String number;
        String index;
        String fromtitle;
        int byteoffset;
        String anchor;
}

しかし、GsonによってHTTP応答をこれらのオブジェクトに変換し、フィールド'title'の値を読み取ろうとすると、JavaNullPointerExceptionをトリガーするエラーが発生します。変換のコードは次のとおりです。

InputStream stream = null;
try {
    stream = entity.getContent();
} catch (IllegalStateException e) {
    Log.e("Stream","ERROR illegalstateexception");
} catch (IOException e) {
    Log.e("Stream","ERROR exception");
}
reader = new BufferedReader(new InputStreamReader(stream));
GsonBuilder bldr = new GsonBuilder();
Gson gson = bldr.create();
WikiResponse = gson.fromJson(reader, WikiResponseSections.class);
if (WikiResponse != null){
    Log.i("WikiResponse",WikiResponse.getTitle()); //The error triggers HERE
    publishProgress();
}
else
    Log.i("WikiResponse","NULL");
}

もう一度助けてくれてありがとう

4

1 に答える 1

0

GoogleのGsonライブラリを使用できます。それはこのように動作します:

InputStream source = ...; // your code to get the Json from a url
Gson gson = new Gson();
Reader reader = new InputStreamReader(source);
MyResponse response = gson.fromJson(reader, MyResponse.class);

MyResponseあなたのオブジェクトはどこにありますか。を作成するときはMyResponse、フィールドにJsonのフィールドと同じ名前とタイプを付けます

MyResponseクラスは次のようになります。

public class MyResponse{
    String title;
    ArrayList<sections>;
}

public class sections{
    int toclevel;
    String level;
    String line;
    String number;
    String fromtitle;
    long byteoffset;
    String anchor;
}



public class WikiResponseParse{
    Parse parse;
    public class Parse{
        String title, text;
    }
}

Javaに準拠していないためにjsonフィールド名を使用できない場合:

次のインポートを追加します。

import com.google.gson.annotations.SerializedName;

そしてあなたのクラスで:

@SerializedName("*")
public String star;
于 2012-12-05T15:53:04.960 に答える