今回はプログラミングについて書く。とりあえずAndroidでJSONを取得したい時にRetrofit使えばどうにかなるらしいよ、という話。
とりあえずここのAPIを使ってみる。
APIリファレンス - connpass
んで、ここにアクセスしてみると、
http://connpass.com/api/v1/event/
こんな感じになる。よくわからないけど、HTMLが含まれているのでエスケープ文字とかがあるんだろうか。
それをここにコピペして右は各自いじって欲しい。
今回は、
Class Nameはjson
Source typeはJSON
Annotation styleはGson
にする。
入力したら下のZipを押すとデータクラスが出来上がる。
http://www.jsonschema2pojo.org/
・・・のだが、長過ぎると出来ないので、検索結果を1つにしてやる。
クエリの使い方は先程のリファレンスを参照。
そしたらModule:appの方のbuild.gradleのdependenciesに以下を追加する。
compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.retrofit2:converter-gson:2.1.0' compile 'com.google.code.gson:gson:2.4' compile 'org.glassfish:javax.annotation:10.0-b28'
パーミッションも追加
<uses-permission android:name="android.permission.INTERNET"/>
できたらMainActivityがあるらへんにさっきのZipを解凍してデータクラスをコピペする。
次に、APIを叩くインターフェースを作る。
public interface Api { @GET("/api/v1/event") Call<Json> getJson(); }
解説は後ほどする。
最後に、MainActivityいじって終わり。
public class MainActivity extends AppCompatActivity implements Callback<Json> { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final String URL = "http://connpass.com/"; Gson gson = new GsonBuilder().setLenient().create(); Retrofit retrofit = new Retrofit.Builder(). baseUrl(URL) .addConverterFactory(GsonConverterFactory.create(gson)) .build(); Api api = retrofit.create(Api.class); Call<Json> call = api.getJson(); call.enqueue(this); } @Override public void onResponse(Call<Json> call, Response<Json> response) { if (response.code() == 200){ List<Event> events = response.body().getEvents(); for (Event e:events){ System.out.println(e.getTitle()); } } } @Override public void onFailure(Call<Json> call, Throwable t) { Toast.makeText(getApplicationContext(),t.getMessage(),Toast.LENGTH_SHORT).show(); t.printStackTrace(); } }
結果
長くなったので解説は別記事にする。
ソース全文はこちら