私のインライン コメントを見つけてください。これはすべてボタン クリックで行われます。
私の質問は次のとおりです。
同じことを行うためのより良い(またはアンドロイドスタイルの)アプローチはありますか?
非同期タスクまたはサービスで Web サービス呼び出しをトリガーするための理想的なアプローチです。これにより、HTTP が起動して応答を取得するまで UI スレッドがブロックされなくなります。
グラフィック コンテンツを取得して REST ベースの Web サービスに投稿するための推奨される方法は何ですか?
バックエンドから取得しようとすると、通常、グラフィックス コンテンツは base64 になります。この例を参照してください: http://androidtrainningcenter.blogspot.in/2012/03/how-to-convert-string-to-bitmap-and.html
グラフィックをサーバーに投稿するために、アップロードする画像のパスとファイル名を知っていると仮定します。イメージをキー名として使用して、この文字列を NameValuePair に追加します。
画像の送信は、HttpComponents ライブラリを使用して行うことができます。最新の HttpClient (現在は 4.0.1) バイナリと依存パッケージをダウンロードし、apache-mime4j-0.6.jar と httpmime-4.0.1.jar をプロジェクトにコピーして、Java ビルド パスに追加します。
クラスに次のインポートを追加する必要があります。
org.apache.http.entity.mime.HttpMultipartMode をインポートします。org.apache.http.entity.mime.MultipartEntity をインポートします。org.apache.http.entity.mime.content.FileBody をインポートします。org.apache.http.entity.mime.content.StringBody をインポートします。MultipartEntity を作成して、POST 要求に画像を添付できるようになりました。次のコードは、これを行う方法の例を示しています。
public void post(String url, List nameValuePairs) { HttpClient httpClient = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); HttpPost httpPost = 新しい HttpPost(url);
try {
MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
for(int index=0; index < nameValuePairs.size(); index++) {
if(nameValuePairs.get(index).getName().equalsIgnoreCase("image")) {
// If the key equals to "image", we use FileBody to transfer the data
entity.addPart(nameValuePairs.get(index).getName(), new FileBody(new File (nameValuePairs.get(index).getValue())));
} else {
// Normal string data
entity.addPart(nameValuePairs.get(index).getName(), new StringBody(nameValuePairs.get(index).getValue()));
}
}
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost, localContext);
} catch (IOException e) {
e.printStackTrace();
}
}
お役に立てれば!