Android+JsonPullParser
AndroidでJsonPullParserを使うっていうネタ。まぁ公式にもサンプルあるしそれ参考にすれば良いんじゃねって所なんで
※@JsonModel等は前回のをそのまま利用
MainActivity.java
package sample.test.jpp;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import javax.net.ssl.HttpsURLConnection;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import net.vvakame.util.jsonpullparser.JsonFormatException;
public class MainActivity extends Activity {
private static final String TAG = MainActivity.class.getName();
private ArrayAdapter<String> mAdapter;
private ListView mListView;
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
mListView = new ListView(this);
mListView.setAdapter(mAdapter);
setContentView(mListView);
}
@Override
protected void onStart() {
super.onStart();
List<Repository> repositories = getRepositories();
for (Repository repository : repositories) {
mAdapter.add(repository.getName());
}
mAdapter.notifyDataSetChanged();
}
List<Repository> getRepositories() {
List<Repository> repositories = new ArrayList<Repository>();
try {
URL url = new URL(Repository.URL);
HttpsURLConnection conn = null;
try {
conn = (HttpsURLConnection)url.openConnection();
repositories = RepositoryGen.getList(conn.getInputStream());
} catch (IOException e) {
e.printStackTrace();
} catch (JsonFormatException e) {
e.printStackTrace();
} finally {
if (conn != null) {
conn.disconnect();
conn = null;
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
return repositories;
}
}
もろUIThreadでネット通信しているからAndroid4.x系ではエラーになりそうな気がするけど
でEclipseで開発する分には注釈処理なファクトリーパスとか設定すればいいけど、antを使ってビルドするようなケース(Jenkinsとか?)の場合には公式にあるcustom_rules.xmlを使えば良い
<?xml version="1.0" encoding="UTF-8"?>
<project name="custom_rules">
<target name="-pre-compile">
<!-- pre-compile時に-processorする際にandroidパッケージが解決できないエラーが出るけどソースの生成は出来る。それが気になる場合には bootclasspathref="project.target.class.path" を追加すれば良い? -->
<javac fork="yes" srcdir="${src}" compiler="javac1.6" encoding="UTF-8" includeantruntime="false">
<compilerarg line="-proc:only" />
<compilerarg line="-classpath ${apt.processor.dir}/*" />
<compilerarg line="-processor net.vvakame.util.jsonpullparser.factory.JsonAnnotationProcessor" />
<compilerarg line="-s ${gen}" />
<compilerarg line="-AJsonPullParserClassPostfix=${jpp.genclass.postfix}" />
</javac>
</target>
</project>
な感じで大体そのまま取ってきて、ant.propertiesで
gen=gen
src=src
apt.processor.dir=factory
jpp.genclass.postfix=Gen
な感じでぶち込む。factoryディレクトリにjsonpullparser-aptなライブラリをぶち込んでおけば良い。あとは「ant clean release」等を利用してAPT処理されたソースが生成されてちゃんとビルド出来るか確認しておく