1. Trang chủ
  2. » Công Nghệ Thông Tin

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

6 389 2

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 6
Dung lượng 153 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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

Trang 1

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>

Trang 2

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);

}

Trang 3

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) {

Trang 4

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;

Trang 5

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>

Trang 6

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.

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

TỪ KHÓA LIÊN QUAN

w