このままでは使い物にはなりませんが、基本コードとしてのテンプレートになります。ですから、この後、ListView と Gson 用クラスををカスタマイズして項目を増やしていくだけでリストビューの部分の作成は容易になります。
package com.example.listviewobjectjson;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.List;
import com.google.gson.Gson;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
public class MyListview extends Activity {
private Gson gson = null;
private WebGet task;
private JSON_STRING js;
private ArrayAdapter<MyObject> basicAdapter;
// ************************************************************
// Android 用初期処理
// ************************************************************
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_listview);
Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// AsyncTask に引数を与えて呼び出す
// 1) doInBackground, 2) onProgressUpdate, 3) onPostExecute
task = new WebGet();
task.execute( "http://10.0.2.2/lightbox/php_json/log.php" );
}
});
}
// ************************************************************
// Android 用非同期処理
// ************************************************************
private class WebGet extends AsyncTask<String, String, String> {
// ここは使っていません
@Override
protected void onPreExecute() {
super.onPreExecute();
}
// *******************************************************
// UI スレッド側の処理 ( 引数は JSON 文字列 )
// *******************************************************
@Override
protected void onPostExecute(String result) {
// UI スレッドとして処理される
System.out.println(result);
// gson インスタンス
gson = new Gson();
// JSON を クラスインスタンスに変換
js = gson.fromJson(result,JSON_STRING.class);
// js.item は List<MyObjecyt>
basicAdapter = new ArrayAdapter<MyObject>(
MyListview.this,
R.layout.textview,
js.item
);
// リストビューにアダプタをセット
ListView listView = (ListView)MyListview.this.findViewById(R.id.listView1);
listView.setAdapter(basicAdapter);
}
// *******************************************************
// 非同期スレッドの呼び出し
// *******************************************************
@Override
protected String doInBackground(String... aurl) {
Log.i("MyListview2:","開始");
String json_string = "";
try {
// 引数の URL を使用して実行
URL url = new URL(aurl[0]);
// 接続オブジェクト( getInputStream をする為のもの )
HttpURLConnection http = (HttpURLConnection)url.openConnection();
http.setConnectTimeout(30000);
http.setReadTimeout(30000);
http.setRequestMethod("GET");
// 以下読み込み3セット
InputStream i_stream = http.getInputStream();
// UTF-8 でリーダーを作成
InputStreamReader i_stream_reader = new InputStreamReader(i_stream, "UTF-8");
// 行単位で読み込む為の準備
BufferedReader b_reader = new BufferedReader(i_stream_reader);
// 行の一括読みこみ
String line_buffer;
// BufferedReader は、readLine が null を返すと読み込み終了
while ( null != (line_buffer = b_reader.readLine() ) ) {
// コマンドプロンプトに表示
json_string += line_buffer;
}
// 後処理
b_reader.close();
i_stream_reader.close();
i_stream.close();
http.disconnect();
}
catch (Exception e) {
e.printStackTrace();
}
// JSON 文字列を onPostExecute に対して送る
return json_string;
}
}
// ************************************************************
// GSON で使う為の JSON 文字列の構造を定義したクラス
// ************************************************************
private class JSON_STRING {
List<MyObject> item;
}
private class MyObject {
String text;
// 単純リストビューなので、toString で 内容を返すようにしておく
public String toString() {
return this.text;
}
}
// ************************************************************
// メニュー( 未使用 )
// ************************************************************
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_my_listview, menu);
return true;
}
}
関連する記事 Android をテストするのにほんの少し楽になるかもしれないクラス ( このクラスでもう少しコードがすっきりします )
|
|
【Androidの最新記事】
- デバイスを探す / Find My Device - Google / Android Find
- JavaScript から Android へアクセス
- Monaca と 本当の 『Onsen UI最小限のテンプレート』
- Android 5.1 リリース済み。SDK( android-sdk_r24.0.2-windows.zip ) でまずエミュレータ作って、あとから Eclipse と Android Studio..
- クラウドでアプリを作成してスマホで動作させる『Monaca』を Android エミュレータの 5.1 で動作確認しました
- Android で Post と Get
- 別の ADT(Android) で作成されたワークスペースを最新の ADT で開く場合の操作方法
- Android : ListView Twitter 検索テンプレート
- トラブル : AndroidManifest.xml に XML 宣言があるとエラーになる???
- Twitter API の自分のアプリのトークンを使って投稿するだけの class Android_Twitter
- Android をテストするのにほんの少し楽になるかもしれないクラス
- Android : Google Spreadsheets API version 3.0でGoogleスプレッドシートを参照
- Android 4.2.2(ADT) : class MyDatePicker extends DatePickerDialog
- Android : 日付ダイアログをインナーで使う( 完了ボタンをクリックした場合としない場合の対応 )
- Android(4.2.2) ADT から Post や Get をできるかぎり簡単にするサンプル
- Android ADT : 単純画面遷移
- HashMap の Key と Value をそれぞれソートして、最終的には 配列に変換して テンプレートを使って for ループを簡単に記述する
- ADT Eclipse : sysout テンプレートの変更
- Android(ADT Eclipse) 用 ボタンイベントテンプレート
- Android から Post 投稿 / HttpPostAndXml extends AsyncTask<Map, Void, Document>







