編輯:關於Android編程
URL對象中前而幾個方法都非常容易理解,而該對象提供的openStream()可以讀取該 URL資源的InputStream,通過該方法可以非常方便地讀取遠程資源。
下面的程序示范如何通過URL類讀取遠程資源:
1)只顯示網絡圖片
2)顯示並下載網絡圖片
1)只顯示網絡圖片

a) activity_main.xml
b)MainActivity.java
package dujun.king.urlgetimage;
import java.io.InputStream;
import java.net.URL;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;
public class MainActivity extends Activity {
Bitmap bitmap;
ImageView imageview;
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
if (msg.what==0x9527) {
//顯示從網上下載的圖片
imageview.setImageBitmap(bitmap);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageview=(ImageView)findViewById(R.id.imageView1);
//創建並啟動一個新線程用於從網絡上下載圖片
new Thread(){
@Override
public void run() {
try {
//創建一個url對象
URL url=new URL(http://www.baidu.com/img/bdlogo.png);
//打開URL對應的資源輸入流
InputStream is= url.openStream();
//從InputStream流中解析出圖片
bitmap = BitmapFactory.decodeStream(is);
// imageview.setImageBitmap(bitmap);
//發送消息,通知UI組件顯示圖片
handler.sendEmptyMessage(0x9527);
//關閉輸入流
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
@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;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
c)AndroidMainifest.xml
2)如果我們要顯示並下載網絡圖片,只需要將MainActivity.java文件修改如下:
package dujun.king.urlgetimage;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;
public class MainActivity extends Activity {
Bitmap bitmap;
ImageView imageview;
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
if (msg.what==0x9527) {
//顯示從網上下載的圖片
imageview.setImageBitmap(bitmap);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageview=(ImageView)findViewById(R.id.imageView1);
//創建並啟動一個新線程用於從網絡上下載圖片
//這裡必須新起一個線程,Android後面的版本中,不允許在主線程中聯網
new Thread(){
@Override
public void run() {
try {
//創建一個url對象
URL url=new URL(http://www.baidu.com/img/bdlogo.png);
//打開URL對應的資源輸入流
InputStream is= url.openStream();
//從InputStream流中解析出圖片
bitmap = BitmapFactory.decodeStream(is);
// imageview.setImageBitmap(bitmap);
//發送消息,通知UI組件顯示圖片
handler.sendEmptyMessage(0x9527);
//關閉輸入流
is.close();
//------------------------------
//下載網絡圖片
//再次打開資源流
is = url.openStream();
//打開手機對應的輸出流
//存放在手機中,並命名為baidulogo.png
OutputStream os = openFileOutput(baidulogo.png, MODE_WORLD_READABLE);
byte[] buff = new byte[1024];
int len = 0;
//因為網絡下載一般不可能一次下載完畢,我們將每次下載好的有效數據寫入
while ((len = is.read(buff)) > 0)
{
os.write(buff,0,len);
}
//關閉流
is.close();
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
@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;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
參考文獻:瘋狂Android講義(第2版) 李剛編著
原文地址:http://blog.csdn.net/qingdujun/article/details/39271479
Android項目之無線點餐(1)--點餐系統數據庫設計
(1)使用數據庫mysql,腳本語言如下: /* 用戶表*/ CREATE TABLE `usertbl` ( `id` int(11) NOT NULL AUTO_
Android游戲開發 自定義手勢--輸入法手勢技術
進行軟件開發時,通常我們都喜歡使用較新版本的工具,但這裡我為什麼使用低版本的SDK來開發Andr
Android五大布局Layout
?? Android開發中,我們可能會遇到過一些很復雜的布局,對於初學者來說,可能腦子會嗡的一下,“這麼復雜!該怎麼整?!”。 不要擔心!再復雜的
Android控件之使用ListView實現時間軸效果
實現思路:該View是通過ListView實現的,通過實體兩個字段內容content和時間time來展示每個ListItem時間軸是使用上面一條線(20dp)