libs-for-android: пример с JsonContentHandler? - PullRequest
0 голосов
/ 10 января 2011

Я использую feed.jar из libs-for-android, и мне нужно проанализировать данные JSON. Я основал класс JsonContentHandler.java, аналогичный классу XmlContentHandler.java, который используется в демонстрациях.

Можете ли вы привести пример использования JsonContentHandler?

спасибо.

пс: https://code.google.com/p/libs-for-android/

1 Ответ

1 голос
/ 02 апреля 2011

Пример ввода:

{"results": [{"id": "1f3d", "title": "Result title", "content": "Some content"}, ...]}

Пример кода:

public class MyContentHandler extends JsonContentHandler {

    private final MatrixCursor mOutput;

    public MyContentHandler(MatrixCursor cursor) {
        mOutput = cursor;
    }

    @Override
    protected Object getContent(String source) throws JSONException {
        JSONObject data = new JSONObject(source);
        int columnCount = output.getColumnCount();
        JSONArray results = data.getJSONArray("results");
        for (int i = 0; i < results.length(); i++) {
            JSONObject result = results.getJSONObject(i);
            String id = result.getString("id");
            String title = result.getString("title");
            String content = result.getString("content");

            // Generate a positive integer ID for compatibility with CursorAdapter
            Long baseId = Long.valueOf(Math.abs(id.hashCode()));

            RowBuilder builder = output.newRow();
            for (int columnIndex = 0; columnIndex < columnCount; columnIndex++) {
                String columnName = output.getColumnName(columnIndex);
                if (columnName.equals(MyContract.Items._ID)) {
                    builder.add(baseId);
                } else if (columnName.equals(MyContract.Items.ID)) {
                    builder.add(id);
                } else if (columnName.equals(MyContract.Items.TITLE)) {
                    builder.add(title);
                } else if (columnName.equals(MyContract.Items.CONTENT)) {
                    builder.add(content);
                } else {
                    throw new RuntimeException("Unknown column: " + columnName);
                }
            }
        }

        // Tell FeedLoader how many rows were added
        return FeedLoader.documentInfo(results.length());
    }
}
...