▼ HttpAccess パッケージのダウンロード ( 解凍して、main\java フォルダの中に コピーして下さい ) ※ OkHttp より 最新の Gradle の記述を取得して build.gradle の dependencies の最後に貼り付けて下さい 例) compile 'com.squareup.okhttp3:okhttp:3.8.1' 処理概要 本来ならば、直接JSON を返す PHP 側のアプリを呼び出すのですが、一般的な『掲示板』に実際 Android から POST して、HTML で返される結果はをアプリ内で Log.i() で表示します。但し、この掲示板のデータの保存形式を JSON にしていますので、投稿終了後再度データそのものを呼び出して ListView に表示しています。 掲示板アプリはこのテスト専用に作成したもので、最後の更新後5分でデータが削除されます。投稿と投稿の間には1分の間隔が必要で、固有コードを入力して、そのコード(スレッド)毎に内容を確認できるようにしています WEB側の実行画面 簡易掲示板(5分限定) ※ このページはレスポンシブです Android の実行画面 最初のフィールドは固有コードの入力で、自由な数字を入力して次のフィールドで本文を投稿します。そして、投稿後 WEB 側で 固有コードを入力して送信して確認します。 ※ 入力された本文は、ListView に表示されます 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:id="@+id/layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" android:weightSum="1"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <EditText android:id="@+id/editTextCode" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:ems="10" android:inputType="number"/> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="Button"/> </LinearLayout> <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="113dp" android:ems="10" android:gravity="top|left" android:inputType="textMultiLine" /> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
MainActivity
import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import com.example.lightbox.web.HttpAccess; import com.google.gson.Gson; import java.util.HashMap; public class MainActivity extends AppCompatActivity { // ******************************* // データ定義 // ******************************* private String url = "https://lightbox.sakura.ne.jp/demo/template/lightbox/bbs-normal/bbs.php"; private String jsonurl = "https://lightbox.sakura.ne.jp/demo/template/lightbox/bbs-normal/data/"; // ******************************* // 変数定義 // ******************************* private ArrayAdapter<WebData> arrayAdapter; private ListView listView; private HttpAccess httpAccess; // ******************************* // 初期処理 // ******************************* @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // ******************************* // ボタンのイベント // ******************************* Button button = (Button) MainActivity.this.findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.i("lightbox", "クリックされました"); CallPost(); } }); // ******************************* // リストビューの準備 // ******************************* listView = (ListView) MainActivity.this.findViewById(R.id.listView); // データが入るオブジェクト arrayAdapter = new ArrayAdapter<WebData>(MainActivity.this, android.R.layout.simple_list_item_1); // 初期化 arrayAdapter.clear(); // リストビューにデータが入るオブジェクトをセット listView.setAdapter(arrayAdapter); // ******************************* // 送信用オブジェクトを作成 // ******************************* httpAccess = new HttpAccess(url); } // ******************************* // 送信処理 // ******************************* private void CallPost() { HashMap<String, String> hashMap = new HashMap<String, String>(); // 投稿テキスト EditText editText = (EditText) MainActivity.this.findViewById(R.id.editText); String text = editText.getText().toString(); hashMap.put("text", text); // 固有コード EditText editTextCode = (EditText) MainActivity.this.findViewById(R.id.editTextCode); String code = editTextCode.getText().toString(); hashMap.put("mycode", code); httpAccess.setUrl(url); // 送信 httpAccess.sendPost(hashMap, new HttpAccess.OnAsyncTaskListener() { @Override public void onAsyncTaskListener(String s) { Log.i("lightbox", s); // 固有コード EditText editTextCode = (EditText) MainActivity.this.findViewById(R.id.editTextCode); String code = editTextCode.getText().toString(); // ******************************* // 投稿(POST) 後、結果の JSON を取得する // ******************************* httpAccess.setUrl(String.format("%s%s.json",jsonurl,code)); httpAccess.sendGet(new HttpAccess.OnAsyncTaskListener() { @Override public void onAsyncTaskListener(String s) { Log.i("lightbox", s); // ******************************* // JSON を ListView に表示する // ******************************* Gson gson = new Gson(); DataList dataList = gson.fromJson(s,DataList.class); // クリア arrayAdapter.clear(); // データセット arrayAdapter.addAll(dataList.item); } }); } }); } }
Google Gson 用のデータ格納用のクラス
package com.example.lightbox.posttest; public class DataList { WebData[] item; }
package com.example.lightbox.posttest; public class WebData { String text; @Override public String toString() { return text; } }
build.gradle( dependencies ) に追加する2行
compile 'com.google.code.gson:gson:2.8.1' compile 'com.squareup.okhttp3:okhttp:3.8.1'
※ android.permission.INTERNET が必要です ※ コピーして使いやすいように、ソースコードにパッケージに依存する記述が無いので注意して下さい。 (画面は、.MainActivity なのでそのまま使用可能です)
|
【2017 Android Studioの最新記事】
- 別に納品するわけでは無いので、Android の ListView のカスタマイズなんてこれで十分でしょ / TestArrayAdapter バージョン2
- Java : Class 構造より、update 文を作成する
- ViewSwitcher を使用した2画面アプリ (5) : SQLiteデータを更新する
- ViewSwitcher を使用した2画面アプリ (4) : SQLiteデータをインポートしてリストビューに表示する
- Android Studio にインポートして使用する SQLite データベースを MDB より作成する VBScript
- ViewSwitcher を使用した2画面アプリ (3) : 画面部分の作成と画面切り替えテスト『画面をコントロールする Helper クラスの作成』
- ViewSwitcher を使用した2画面アプリ (2) : 画面部分の作成と画面切り替えテスト『画面の作成』
- ViewSwitcher を使用した2画面アプリ (1) : 画面部分の作成と画面切り替えテスト『メニューの作成』
- OkHttp を使用した HttpAccess クラスで Web 上の 画像をダウンロードして表示するテンプレート
- OkHttp を使用した HttpAccess クラスで Web 上の PHP アプリに対してファイルをアップロードするテンプレート
- OkHttp を使用した HttpAccess クラスで Web 上のデータを取得(GET)して ListView を表示するテンプレート
- Okhttp を使用した、GET、POST、ファイルアップロードを楽に実装できる HttpAccess クラス
- Android の assets フォルダーに保存した 400x320 の画像ファイルの扱い
- Android の drawable フォルダーに保存した 400x320 の画像ファイルの6種類の扱いと Density
- Android での保存用テキストデータの扱いを okio で簡素化する
- Android 6.0 : テストの為の Runtime Permission の対応を自動化するテンプレート
- Android Studio : Runtime Permission 等の裏方作業を MainActivity にさせて、本来の処理は継承したサブクラスで行う( カメラを呼び出して画像を保存させ、I..
- Android 6.0 エミュレータで 複数の Runtime Permission の対応を簡潔に吸収するクラス( CheckMyPermission )
- Android 6.0 の Runtime Permission に対応する前に、AndroidManifest.xml に権限の記述の必要無いプライベートな書き込みで情報を収集する
- Android Studio : エミュレータで Notification(通知)のテスト