Android SDK の変わり目( 4.0.3 ) で、AsyncTask を使うようになりましたが、わざわざクラスを作成するほどの処理でも無い場合は、以下のように『無名クラス』で実行すると簡単です
package com.example.httpimageview; import java.io.InputStream; import java.net.URL; import android.os.AsyncTask; import android.os.Bundle; import android.app.Activity; import android.graphics.drawable.Drawable; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 画面定義上の View を ID から取得して、目的のクラスでキャスト Button button = (Button)this.findViewById(R.id.button1); // 引数が、onClickListener インターフェイスの setOnClickListener を実行 button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Log.i("button", "クリックされました"); String url = "https://lh3.googleusercontent.com/-0ZRziQFtS9E/UKuFllC5bVI/AAAAAAAAJm0/4cP6WwTLoSk/s800/dl_de772d3b5ed4837976694426a015383f.jpg"; String option = "引渡しテスト"; // Android 非同期処理用『無名』クラス // String は、doInBackground // Void は、Progress 用( ここでは未使用 ) // Drawable は、doInBackground の戻り値でかつ、onPostExecute の引数 new AsyncTask<String, Void, Drawable>() { // 非同期処理 @Override protected Drawable doInBackground(String... params) { // params は、可変長引数 Log.i("button", params[0]); Log.i("button", params[1]); Drawable img_data = null; try { // インターネット上の画像をバイナリで取得して、Drawable に変換 URL url = new URL( params[0] ); InputStream is = (InputStream)url.getContent(); img_data = Drawable.createFromStream(is, ""); } catch(Exception e) { Log.i("button", e.getMessage()); } return img_data; } // 画面描画用 @Override protected void onPostExecute(Drawable result) { if ( result != null ) { // imageView1 には、プロジェクト内のリソースを初期表示しているので、 // null でなかった場合のみ表示変更 ImageView imageView = (ImageView)findViewById(R.id.imageView1); imageView.setImageDrawable(result); } } }.execute(url,option); // クラス作成後メソッドを実行 } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:text="画像表示" /> <ImageView android:id="@+id/imageView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button1" android:layout_below="@+id/button1" android:src="@drawable/ic_launcher" /> </RelativeLayout>
関連する記事 Android ADT : ボタンのクリックコードの取り出し Android ADT : AsyncTask コードの取り出し( 匿名のインナー型 でその場で実行する )
|
【Androidの最新記事】
- デバイスを探す / Find My Device - Google / Android Find
- JavaScript から Android へアクセス
- Monaca と 本当の 『Onsen UI最小限のテンプレート』
- Android 5.1 リリース済み。SDK( android-sdk_r24.0.2-windows.zip ) でまずエミュレータ作って、あとから Eclipse と Android Studio..
- クラウドでアプリを作成してスマホで動作させる『Monaca』を Android エミュレータの 5.1 で動作確認しました
- Android で Post と Get
- 別の ADT(Android) で作成されたワークスペースを最新の ADT で開く場合の操作方法
- Android : ListView Twitter 検索テンプレート
- トラブル : AndroidManifest.xml に XML 宣言があるとエラーになる???
- Twitter API の自分のアプリのトークンを使って投稿するだけの class Android_Twitter
- Android 単純リストビューを google-gson で最速構築
- Android をテストするのにほんの少し楽になるかもしれないクラス
- Android : Google Spreadsheets API version 3.0でGoogleスプレッドシートを参照
- Android 4.2.2(ADT) : class MyDatePicker extends DatePickerDialog
- Android : 日付ダイアログをインナーで使う( 完了ボタンをクリックした場合としない場合の対応 )
- Android(4.2.2) ADT から Post や Get をできるかぎり簡単にするサンプル
- Android ADT : 単純画面遷移
- HashMap の Key と Value をそれぞれソートして、最終的には 配列に変換して テンプレートを使って for ループを簡単に記述する
- ADT Eclipse : sysout テンプレートの変更
- Android(ADT Eclipse) 用 ボタンイベントテンプレート