簡單實現Android讀取網路圖片到本地

NO IMAGE
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

今天在網上看到了一個關於讀取網路檔案的小視訊,覺得不錯,拿來與大家分享

思路

具體的思路比較的簡單,但是思想非常的單純。那就是輸入一個網址,點選按鈕,將從網路上獲取的一張圖片顯示到一個ImageView控制元件上。
這樣看來,我們需要用到的核心就是網路操作了。說白了,就是讀取網路流檔案了。

程式碼展示

首先是主介面的佈局檔案


<LinearLayout 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:orientation="vertical" >
<EditText 
android:id="@ id/et_website"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="please type the url "
/>
<Button 
android:id="@ id/btn_get"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Check"
/>
<ImageView 
android:id="@ id/iv_picture"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"
/>
</LinearLayout>

 然後是主介面的邏輯程式碼


package com.example.getphotobyxml;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import com.example.service.ImageService;
public class MainActivity extends Activity {
private EditText mEt_url;
private ImageView mIv_picture;
private Button mBtn_get;
/**
* 初始化相關的需要使用到的ID
*/
public void init() {
mEt_url = (EditText) findViewById(R.id.et_website);
mIv_picture = (ImageView) findViewById(R.id.iv_picture);
mBtn_get = (Button) findViewById(R.id.btn_get);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//記得要呼叫哦
init();
mBtn_get.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String website = mEt_url.getText().toString();
if (website == null || website.equals("")) {
Toast.makeText(MainActivity.this, "請輸入正確的網址哦!",
Toast.LENGTH_LONG).show();
return;
}
byte[] bytes;
try {
bytes = ImageService.getImage(website);
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0,
bytes.length);
mIv_picture.setImageBitmap(bitmap);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
/**
* 從網路以XML的方式獲得一張圖片,並顯示到一個ImageView上
* 按鈕事件可以直接不註冊onClickListener,而使用這個方法
* @param view
*/
public void getPicture(View view) {
String website = mEt_url.getText().toString();
if (website == null || website.equals("")) {
Toast.makeText(this, "請輸入正確的網址哦!", Toast.LENGTH_LONG).show();
return;
}
byte[] bytes;
try {
bytes = ImageService.getImage(website);
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0,
bytes.length);
mIv_picture.setImageBitmap(bitmap);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

service 以及 tools助手


package com.example.service;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import com.example.utils.StreamTool;
/**
*圖片服務的業務類
*/
public class ImageService {
public static byte[] getImage(String website) throws Exception {
URL url = new URL(website);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
if(conn.getResponseCode()==200){
InputStream inputStream = conn.getInputStream();
byte[] bytes = StreamTool.read(inputStream);
return bytes;
}
return "讀取網路資料失敗".getBytes();
}
}

package com.example.utils;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
/**
*專門用於將輸入流轉換成一個位元組陣列的utils類
*/
public class StreamTool {
public static byte[] read(InputStream inputStream) throws Exception {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int len = 0;
while((len = inputStream.read(buf))!=-1){
baos.write(buf, 0 ,len);
}
baos.close();
return buf;
}
}

總結
這裡面的程式碼是非常的簡單的,我這裡貼出程式碼的主要的目的是為了展示分層的思想,以及重構的藝術。
在程式碼中我們看到了,建立了專門的類來完成專門的工作。而且不同的層次的類,處理的業務也是不一樣的。這樣有助於我們以物件導向的方式程式設計,帶來更加清晰的邏輯。

您可能感興趣的文章:

Android 網路圖片檢視顯示的實現方法Android讀取本地或網路圖片並轉換為BitmapAndroid 非同步獲取網路圖片並處理導致記憶體溢位問題解決方法Android顯示網路圖片例項Android 下載網路圖片並顯示到本地Android使用執行緒獲取網路圖片的方法在Android的應用中實現網路圖片非同步載入的方法Android實現網路圖片瀏覽功能Android 讀取sdcard上的圖片例項(必看)Android sdcard實現圖片儲存 、聯網下載Android開發實現載入網路圖片並下載至本地SdCard的方法

相關文章

Android 開發 最新文章