Androidネットワーク接続とネットワークデータ処理
Androidネットワーク接続とネットワークデータ処理 HTTPリクエスト方式GETとPOST Androidネットワークリクエスト OkHttp OKHttpライブラリを追加する依存 ネットワーク権限の宣言 単純レイアウト OkHttp具体用法
同期、非同期概念 同期 非同期 非同期方法例 データ解析 コンセプト 実践 GsonFormatプラグインのインストール
HTTPリクエスト方式GETとPOST
Android開発では、データの書き込み、データの読み取りなど、データのインタラクションに触れるため、通信間のプロトコルを使用して要求する必要があります.最も一般的なプロトコルはHTTPプロトコルですが、GETとPOSTはHTTPプロトコルで最もよく使われる2つの要求方式です. HTTPプロトコルHTTP(HyperText Transfer Protocolハイパーテキスト転送プロトコル)は、クライアントとサーバが円滑に通信できるように設計されたプロトコルです.HTTPはクライアントとサーバの間でrequest-response protocol(リクエスト-返信プロトコル)で動作する. GETとPOSTの違い GET
POST
一般的にはサーバからデータを取得します
一般的には、フォームをサーバ1にアップロードするために使用されます.
URLが表示され、セキュリティが低い
URLが見えず、セキュリティが高い
コミットされたデータの長さに制限があります
コミットされたデータの長さに制限はありません
データキャッシュ可能
データキャッシュ不可
リンクURLによるパラメータ転送
データをリクエストボディに配置して送信
現在ではセキュリティの高いPOSTを用いて要求されているが,パスワードやその他の機密情報を送信する際にはGETは使用できないに違いない.POSTは、ブラウザ履歴やウェブサーバログにパラメータが保存されないため、GETよりも安全です.GETのデータはURLで全員に表示されています.
Androidネットワークリクエスト
Androidによるネットワークリクエストには、HttpURLConnection、HttpClient、OkHttpの3つの方法があります.HttpClientはAPIの数が多すぎたり、拡張が困難だったりするという欠点があるため、Android 6.0システムでは正式に廃止されている.オリジナルのHttpURLConnectionはJDKで提供されているネットワークAPIですが、ネットワーク操作は非同期やマルチスレッドに及ぶため、自分でオリジナルAPIを使って作成するのは面倒なので、実際の開発はサードパーティのネットワーク通信ライブラリを直接使用することに偏っていますが、今日紹介するOkHttpは多くのネットワーク通信ライブラリの中で最も優れているものです.
OkHttp
OKHttpライブラリの依存を追加
ネットワーク権限の宣言
安全でないhttpリンクを使用している場合は、インベントリファイルに宣言する必要があります.
単純レイアウト
OkHttp具体的な使い方 OkHttpClient を定義し、インスタンス化するは、HTTP要求を開始するためにRequestオブジェクトを作成し、url()メソッドによってターゲットのネットワークアドレスを設定する. OkHttpClientのnewCall()メソッドを呼び出してCallオブジェクトを作成し、execute()メソッドを呼び出してリクエストを送信し、応答データを取得します. は、取得した応答データを受信するためにresponseオブジェクトを定義し、responseDataによって返される具体的な内容を取得する. は、ネットワーク要求が時間のかかる動作であるため、サブスレッドで実行されるべきである.したがって、クリックイベントを設定するときは、onClick()メソッドで新しいサブスレッドを開く必要があります.例: sendRequestWithOkHttp()メソッドの詳細は、次のとおりです.
同期、非同期の概念
同期
同期メソッド呼び出しが開始されると、呼び出し元は、後続の動作を継続するためにメソッド呼び出しが返されるまで待たなければなりません.サブスレッドがプライマリ・スレッドに通知されるまで、現在のプライマリ・スレッドがブロックされます.(要求の発行→サーバ処理待ち→処理完了後に戻る)
非同期
非同期メソッド呼び出しは、通常、別のスレッドで実行されます.プロセス全体が、呼び出し元の作業を阻害しません.プライマリ・スレッドは、インタフェース・コールバックやメッセージ・キューのような考えで、サブスレッドがタスクを完了したときにプライマリ・スレッドに通知すれば、他のことを続けることができます.(リクエストはイベントトリガ>サーバ処理(待つ必要がなく、プライマリ・スレッドは別のことができる)>処理済み)のどちらかで、非同期メソッドを使用してネットワーク・リクエストを行うことを推奨します.
非同期メソッドの例
Callオブジェクトを定義し、requestをcallに渡し、call呼び出し.enqueue()メソッドで実行します.Enqueue()メソッドにCallbackインタフェースの匿名実装クラス(onFailure()メソッドとonRresponse()メソッドを含む)を渡す必要があります.非同期リスニング方法の例を次に示します.
データ解析
コンセプト
一般に,ネットワークリクエストにより取得されるデータは,xml形式データ,Json形式データなど多くある.私たちがネットワークリクエストで取得したデータはJson形式のデータです.たとえば
以上の{}は1つのクラスのインスタンスに相当し,[{},{}]は2つのクラスからなる配列に相当し,2つのクラスのインスタンスを含む.
じっこう Gsonライブラリの依存 を追加 BaseResponseベースクラスを新規作成し、サービス側から取得したデータを受信します.クラスの内容はGsonformatプラグインでインポートできます.alt+sはプラグインインタフェースを呼び出し、json形式のデータをコピーし、OKをクリックします. parseJSOnWithGSON()メソッド を作成クリックイベントOnClick()メソッドでparseJSOnWithGSON()メソッドを呼び出します.
GsonFormatプラグインのインストール
File→setting→plugin→Marketplace、gsonformat/Sgsonformat/gsonfromatplusを検索し、alt+insertでgsonformatプラグインを呼び出し、jsonフォーマットデータをコピーしてokをクリックします.
インタフェースのテスト:https://getman.cn/インタフェースドキュメント:http://www.docway.net/
参考資料:Android入門のHttpリクエスト方式GetとPostの同期と非同期の区別同期(Synchronous)と非同期(Asynchronous)
一般的にフォーム(データセット)をサーバにアップロードし、サーバが処理してからクライアントにデータを返します.↩︎
HTTPリクエスト方式GETとPOST
Android開発では、データの書き込み、データの読み取りなど、データのインタラクションに触れるため、通信間のプロトコルを使用して要求する必要があります.最も一般的なプロトコルはHTTPプロトコルですが、GETとPOSTはHTTPプロトコルで最もよく使われる2つの要求方式です.
POST
一般的にはサーバからデータを取得します
一般的には、フォームをサーバ1にアップロードするために使用されます.
URLが表示され、セキュリティが低い
URLが見えず、セキュリティが高い
コミットされたデータの長さに制限があります
コミットされたデータの長さに制限はありません
データキャッシュ可能
データキャッシュ不可
リンクURLによるパラメータ転送
データをリクエストボディに配置して送信
現在ではセキュリティの高いPOSTを用いて要求されているが,パスワードやその他の機密情報を送信する際にはGETは使用できないに違いない.POSTは、ブラウザ履歴やウェブサーバログにパラメータが保存されないため、GETよりも安全です.GETのデータはURLで全員に表示されています.
Androidネットワークリクエスト
Androidによるネットワークリクエストには、HttpURLConnection、HttpClient、OkHttpの3つの方法があります.HttpClientはAPIの数が多すぎたり、拡張が困難だったりするという欠点があるため、Android 6.0システムでは正式に廃止されている.オリジナルのHttpURLConnectionはJDKで提供されているネットワークAPIですが、ネットワーク操作は非同期やマルチスレッドに及ぶため、自分でオリジナルAPIを使って作成するのは面倒なので、実際の開発はサードパーティのネットワーク通信ライブラリを直接使用することに偏っていますが、今日紹介するOkHttpは多くのネットワーク通信ライブラリの中で最も優れているものです.
OkHttp
OKHttpライブラリの依存を追加
compile 'com.squareup.okhttp3:okhttp:3.6.0'
ネットワーク権限の宣言
<uses-permission android:name="android.permission.INTERNET"/>
安全でないhttpリンクを使用している場合は、インベントリファイルに宣言する必要があります.
android:usesCleartextTraffic="true"
単純レイアウト
<Button
android:id="@+id/btn_request"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" "/>
<Button
android:id="@+id/btn_jump"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" "/>
<TextView
android:id="@+id/tv_data"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
OkHttp具体的な使い方
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("http://106.53.96.124/wanted/public/index.php/index/article/find")
.build();
Response response = client.newCall(request).execute();
String responseData = response.body().string();
btn_request.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new Runnable() {
@Override
public void run() {
sendRequestWithOkHttp();// 1-4
}
}).start();
}
});
private void sendRequestWithOkHttp(){
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("http://106.53.96.124/wanted/public/index.php/index/article/find")
.build();
//try catch
try {
//
Response response = client.newCall(request).execute();
String responseData = response.body().string();
// , Ui
runOnUiThread(new Runnable() {
@Override
public void run() {
tv_data.setText(responseData);
}
});
}catch (Exception e){
e.printStackTrace();
}
}
同期、非同期の概念
同期
同期メソッド呼び出しが開始されると、呼び出し元は、後続の動作を継続するためにメソッド呼び出しが返されるまで待たなければなりません.サブスレッドがプライマリ・スレッドに通知されるまで、現在のプライマリ・スレッドがブロックされます.(要求の発行→サーバ処理待ち→処理完了後に戻る)
非同期
非同期メソッド呼び出しは、通常、別のスレッドで実行されます.プロセス全体が、呼び出し元の作業を阻害しません.プライマリ・スレッドは、インタフェース・コールバックやメッセージ・キューのような考えで、サブスレッドがタスクを完了したときにプライマリ・スレッドに通知すれば、他のことを続けることができます.(リクエストはイベントトリガ>サーバ処理(待つ必要がなく、プライマリ・スレッドは別のことができる)>処理済み)のどちらかで、非同期メソッドを使用してネットワーク・リクエストを行うことを推奨します.
非同期メソッドの例
Callオブジェクトを定義し、requestをcallに渡し、call呼び出し.enqueue()メソッドで実行します.Enqueue()メソッドにCallbackインタフェースの匿名実装クラス(onFailure()メソッドとonRresponse()メソッドを含む)を渡す必要があります.非同期リスニング方法の例を次に示します.
private void sendRequestWithOkHttp(){
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("http://106.53.96.124/wanted/public/index.php/index/article/find")
.build();
//
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
String jsonData = response.body().string();
// UI
runOnUiThread(new Runnable() {
@Override
public void run() {
tv_data.setText(jsonData);
}
});
}
});
}
データ解析
コンセプト
一般に,ネットワークリクエストにより取得されるデータは,xml形式データ,Json形式データなど多くある.私たちがネットワークリクエストで取得したデータはJson形式のデータです.たとえば
{
"name":"alex","age":"18","friends":[{
"name":"Amy","age":"19"},{
"name":"Jack","age":"18"}]}
以上の{}は1つのクラスのインスタンスに相当し,[{},{}]は2つのクラスからなる配列に相当し,2つのクラスのインスタンスを含む.
じっこう
implementation 'com.google.code.gson:gson:2.7'
private void parseJSONWithGSON(){
Gson gson = new Gson();
// Json , TypeToken fromJson()
BaseResponse<List<BaseResponse.Article>> baseResponse = gson.fromJson(jsonData,new TypeToken<BaseResponse<List<BaseResponse.Article>>>(){
}.getType());
List<BaseResponse.Article> articleList = baseResponse.getData();
Log.d("code", "code is " + baseResponse.getCode());
Log.d("msg", "msg is " + baseResponse.getMsg());
for (BaseResponse.Article article:articleList){
Log.d("Data", "id is "+article.getId());
Log.d("Data", "title is "+article.getTitle());
Log.d("Data", "content is "+article.getContent());
Log.d("Data", "tags is "+article.getTags());
Log.d("Data", "create_time is "+article.getCreate_time());
Log.d("Data", "writer is "+article.getWriter());
Log.d("Data", "images is "+article.getImages());
Log.d("Data", "photo is "+article.getPhoto());
Log.d("Data", "like_number is "+article.getLike_number());
Log.d("Data", "comment_number is "+article.getComment_number());
}
}
btn_show.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (jsonData==null){
Toast.makeText(MainActivity.this," ",Toast.LENGTH_SHORT).show();
}
else parseJSONWithGSON();
}
});
GsonFormatプラグインのインストール
File→setting→plugin→Marketplace、gsonformat/Sgsonformat/gsonfromatplusを検索し、alt+insertでgsonformatプラグインを呼び出し、jsonフォーマットデータをコピーしてokをクリックします.
インタフェースのテスト:https://getman.cn/インタフェースドキュメント:http://www.docway.net/
参考資料:Android入門のHttpリクエスト方式GetとPostの同期と非同期の区別同期(Synchronous)と非同期(Asynchronous)
一般的にフォーム(データセット)をサーバにアップロードし、サーバが処理してからクライアントにデータを返します.↩︎