▼ 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(通知)のテスト



Android の実行画面
最初のフィールドは固有コードの入力で、自由な数字を入力して次のフィールドで本文を投稿します。そして、投稿後 WEB 側で 固有コードを入力して送信して確認します。
※ 入力された本文は、ListView に表示されます
activity_main.xml




