Lập trình Android: Download hình từ Internet ppsx

6 387 2
Lập trình Android: Download hình từ Internet ppsx

Đang tải... (xem toàn văn)

Thông tin tài liệu

Trung tâm Tin học – ĐH KHTN TẢI HÌNH TỪ INTERNET Sau đây mình sẽ làm 1 demo trình bày cách thức download 1 tấm hình từ Internet. Do tính chất của demo nên mình thêm trực tiếp link của hình vào phần code. Các bạn có thể cải tiến thêm về cách chọn link hình. Bài demo của mình được làm theo các bước sau: 1/ Tạo 1 Project : Project name: AsyncTaskDemo Build Target: Android 2.3.3 Application name: AsyncTaskDemo Package name: com.dac. AsyncTaskDemo Create Activity: HttpActivity.java 2/ Tiếp theo các bạn thiết kế giao diện như sau: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/button" android:text="Get Image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="doClick" /> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <TextView android:id="@+id/errorMsg" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ImageView android:id="@+id/image" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1" /> </LinearLayout> Lập trình Android – http://laptrinhdidong.vn Page 1 Trung tâm Tin học – ĐH KHTN 3/ Tiếp theo các bạn tạo 1 class CustomHttpClient.java trong package chính và viết code như sau: package com.dac.AsyncTaskDemo import org.apache.http.HttpVersion; import org.apache.http.client.HttpClient; import org.apache.http.conn.ClientConnectionManager; import org.apache.http.conn.params.ConnManagerParams; import org.apache.http.conn.scheme.PlainSocketFactory; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import org.apache.http.params.HttpProtocolParams; import org.apache.http.protocol.HTTP; public class CustomHttpClient { private static HttpClient customHttpClient; private CustomHttpClient() { } public static synchronized HttpClient getHttpClient() { if (customHttpClient == null) { HttpParams params = new BasicHttpParams(); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(params, HTTP.DEFAULT_CONTENT_CHARSET); HttpProtocolParams.setUseExpectContinue(params, true); ConnManagerParams.setTimeout(params, 1000); HttpConnectionParams.setConnectionTimeout(params, 5000); HttpConnectionParams.setSoTimeout(params, 10000); SchemeRegistry schReg = new SchemeRegistry(); schReg.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); schReg.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443)); ClientConnectionManager conMgr = new ThreadSafeClientConnManager(params,schReg); customHttpClient = new DefaultHttpClient(conMgr, params); } Lập trình Android – http://laptrinhdidong.vn Page 2 Trung tâm Tin học – ĐH KHTN return customHttpClient; } } 4/ Sau đó các bạn tạo tiếp class DownloadImageTask.java trong package chính để thực hiện việc download: package com.dac.AsyncTaskDemo import java.io.IOException; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import org.apache.http.util.EntityUtils; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.util.Log; import android.widget.ImageView; import android.widget.TextView; public class DownloadImageTask extends AsyncTask<String, Integer, Bitmap> { private Context mContext; DownloadImageTask(Context context) { mContext = context; } protected void onPreExecute() { } protected Bitmap doInBackground(String urls) { Log.v("doInBackground", "doing download of image"); return downloadImage(urls); } protected void onProgressUpdate(Integer progress) { TextView mText = (TextView) ((Activity) mContext).findViewById(R.id.text); mText.setText("Progress so far: " + progress[0]); } protected void onPostExecute(Bitmap result) { Lập trình Android – http://laptrinhdidong.vn Page 3 Trung tâm Tin học – ĐH KHTN if(result != null) { ImageView mImage = (ImageView) ((Activity) mContext).findViewById(R.id.image); mImage.setImageBitmap(result); } else { TextView errorMsg = (TextView) ((Activity) mContext).findViewById(R.id.errorMsg); errorMsg.setText("Problem downloading image. Please try again later."); } } private Bitmap downloadImage(String urls) { HttpClient httpClient = CustomHttpClient.getHttpClient(); try { HttpGet request = new HttpGet(urls[0]); HttpParams params = new BasicHttpParams(); HttpConnectionParams.setSoTimeout(params, 60000); request.setParams(params); publishProgress(25); HttpResponse response = httpClient.execute(request); publishProgress(50); byte[] image = EntityUtils.toByteArray(response.getEntity()); publishProgress(75); Bitmap mBitmap = BitmapFactory.decodeByteArray(image, 0, image.length); publishProgress(100); return mBitmap; } catch (IOException e) { e.printStackTrace(); } return null; } } 5/ Cuối cùng các bạn viết code trong file Activity chính như sau: package com.dac.AsyncTaskDemo; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; Lập trình Android – http://laptrinhdidong.vn Page 4 Trung tâm Tin học – ĐH KHTN import android.view.View; public class HttpActivity extends Activity { private DownloadImageTask diTask; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void doClick(View view) { if(diTask != null) { AsyncTask.Status diStatus = diTask.getStatus(); Log.v("doClick", "diTask status is " + diStatus); if(diStatus != AsyncTask.Status.FINISHED) { Log.v("doClick", " no need to start a new task"); return; } } diTask = new DownloadImageTask(this); //Link cua minh diTask.execute("http://i1133.photobucket.com/albums/m592/Nobilomo1/cscom.jpg") ; } } Và khi hoàn thành các bạn nhớ phải khai báo cho ứng dụng được phép truy cập internet trong file AndroidManifest.xml: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.dac.AsyncTaskDemo" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".HttpActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="3" /> <uses-permission android:name="android.permission.INTERNET"></uses-permission> </manifest> Lập trình Android – http://laptrinhdidong.vn Page 5 Trung tâm Tin học – ĐH KHTN Khi debug các bạn bấm vào button trên màn hình và đợi ứng dụng tải (có thể hiện số % tải được) và xem kết quả : Mọi ý kiến đóng góp các bạn vui lòng gữi bài viết về forum http://forum.laptrinhdidong.vn/ . Rất mong nhận được phản hồi của các bạn. Lập trình Android – http://laptrinhdidong.vn Page 6 . Tin học – ĐH KHTN TẢI HÌNH TỪ INTERNET Sau đây mình sẽ làm 1 demo trình bày cách thức download 1 tấm hình từ Internet. Do tính chất của demo nên mình thêm trực tiếp link của hình vào phần code android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/button" android:text="Get Image" android:layout_width="wrap_content". android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="doClick" /> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content"

Ngày đăng: 08/08/2014, 09:22

Tài liệu cùng người dùng

Tài liệu liên quan