Gradle に、以下を追加記述して、Web から JSON データを取得して、文字列配列データを作成して ListView に表示しています。
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0'
compile 'com.squareup.okhttp3:okhttp:3.8.0'
AsyncTask を 匿名内部クラスにして、メインの処理が別ソースへ行かないようにしていますが、別クラスを作った場合を想定して、引渡しパラメータを独自クラスにしています。ただ、doInBackground 内を画面アクセス用のオブジエクトが通りますが、doInBackground 内では使いません。
表示するデータ
[
"スルガ銀行",
"楽天銀行",
"ジャパンネット銀行",
"りそな銀行",
"あおぞら銀行",
"埼玉りそな銀行",
"三菱東京UFJ銀行",
"近畿大阪銀行",
"イオン銀行",
"琉球銀行",
"ソニー銀行",
"住信SBIネット銀行",
"北國銀行",
"三井住友銀行",
"西日本シティ銀行",
"常陽銀行",
"北陸銀行"
]
package com.example.lightbox.listviewfromweb;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.google.gson.Gson;
import java.io.IOException;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity {
private String url = "https://lightbox.sakura.ne.jp/demo/json/bank_visa_array.php";
private ArrayAdapter<String> arrayAdapter;
private ListView listView;
private class MyParam {
ArrayAdapter<String> arrayAdapter;
String url;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// リストビュー
listView = (ListView) MainActivity.this.findViewById(R.id.listView);
// データが入るオブジェクト
arrayAdapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1);
// リストビューにデータが入るオブジェクトをセット
listView.setAdapter(arrayAdapter);
MyParam mp = new MyParam();
mp.arrayAdapter = arrayAdapter;
mp.url = url;
new AsyncTask<MyParam,Void,String>() {
private ArrayAdapter<String> arrayAdapter;
private String url;
@Override
protected String doInBackground(MyParam... params) {
this.arrayAdapter = params[0].arrayAdapter;
this.url = params[0].url;
String result ="[\"error\"]";
OkHttpClient client = new OkHttpClient();
Request.Builder builder = new Request.Builder();
builder.url(this.url);
Request request = builder.build();
Response response = null;
try {
response = client.newCall(request).execute();
result = response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
@Override
protected void onPostExecute(String s) {
Gson gson = new Gson();
String[] data = gson.fromJson(s, String[].class);
this.arrayAdapter.addAll(data);
}
}.execute(mp);
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.example.lightbox.listviewfromweb"
minSdkVersion 23
targetSdkVersion 23
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0'
compile 'com.squareup.okhttp3:okhttp:3.8.0'
}
https://mvnrepository.com/artifact/com.google.code.gson/gson/2.8.0
OkHttp
posted by
at 2017-05-29 22:27
|
Comment(0)
|
テンプレート
|

|