日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用AsyncTask来获取网络图片

發布時間:2025/3/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用AsyncTask来获取网络图片 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先看下運行結束

這里有兩個Button

點擊第一個Button運行的結果!第一張有一個旋轉的灰色圈圈!


點擊第二個Button運行的結果如下:帶進度條的


ok,看下實現方法

先在配置清單中加一個訪問網絡的權限!

<uses-permission android:name="android.permission.INTERNET" />

下面是第一個Button實現效果所使用的方法

第一步:在image布局中添加控件

<ImageViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/imaged"/><ProgressBarandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:visibility="gone"android:layout_centerInParent="true"android:id="@+id/progressBar"/>

第二步:直接到ImageTeakJava類中來

public class ImageTeak extends AppCompatActivity {private ProgressBar mProgressbar;private ImageView mImage;private MyAsyncTask task;//網絡圖片地址private static String url="http://b365.photo.store.qq.com/psb?/V1112Bib4N2Zv2/yIw4AGwbwoCsuA5Zid.eAEE9YpH0znIsrS4os49LY7M!/c/dG0BAAAAAAAA&bo=OARoBQAAAAAREHY!&rf=mood_app";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.image);mProgressbar= (ProgressBar) findViewById(R.id.progressBar);mImage= (ImageView) findViewById(R.id.imaged);//創建一個類task =new MyAsyncTask();//啟動task.execute(url);}/** AsyncTask<String,Void,Bitmap>第一個參數;為輸入的url參數是String類型的第二個參數:我們沒有進度條所以為Void類型的第三個參數;返回的是Bitmap*/class MyAsyncTask extends AsyncTask<String,Void,Bitmap>{@Override//第一個會調用的方法protected void onPreExecute() {// 開始之前要做的準備操作在這里面執行super.onPreExecute();mProgressbar.setVisibility(View.VISIBLE);//顯示進度}@Override//第三個會調用的方法。用來展示處理的結果!// (當doInBackground方法完成異步處理之后會調用的方法)protected void onPostExecute(Bitmap bitmap) {super.onPostExecute(bitmap);mProgressbar.setVisibility(View.GONE);/*** 將doInBackground()方法中* 返回的bitmap解析的圖片設置給ImageView* */mImage.setImageBitmap(bitmap);}@Override//第二個會調用的方法。真正的耗時操作!下載網絡圖片protected Bitmap doInBackground(String... strings) {//獲取傳遞進來的參數,取出對應的URLString url=strings[0];//定義網絡連接對象URLConnection connection;//獲取需要的BitmapBitmap bitmap=null;//獲取數據的輸入流InputStream is;try {//獲取網絡連接對象connection=new URL(url).openConnection();//獲取輸入流is=connection.getInputStream();//包裝下BufferedInputStream bis=new BufferedInputStream(is);//設置睡眠三秒Thread.sleep(3000);//通過decodeStream()方法解析輸入流將輸入流解析成Bitmap圖片bitmap= BitmapFactory.decodeStream(bis);//關閉流is.close();bis.close();//捕獲異常} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}//返回的是解析后的網絡圖像return bitmap;}} }

第三步:在activity.xml布局中添加兩個 Button

<Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="loadImage"android:text="加載圖片"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/loadProgress"android:onClick="loadProgress"android:text="帶進度條的獲取圖片"/>

第四步:在Mactivity.java中進行編輯

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);/* MsyncTask task=new MsyncTask();task.execute();*/}public void loadImage(View view){Intent intent=new Intent(MainActivity.this,ImageTeak.class);startActivity(intent);}public void loadProgress(View view){Intent intent=new Intent(MainActivity.this,ProgressTesk.class);startActivity(intent);} }

OK!點擊第一個Button效果的代碼寫完啦!、

再看下第第二ButtOn實現效果的代碼

第一步:在progress.xml布局中添加控件

<ImageViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/imageView"/><ProgressBarandroid:visibility="gone"android:layout_width="match_parent"android:layout_height="wrap_content"style="?android:attr/progressBarStyleHorizontal"android:id="@+id/bar"android:layout_centerInParent="true"/>

第二步:對ProgressTesk.java類進行編輯

public class ProgressTesk extends AppCompatActivity {private ProgressBar bar;private MyAsyncTask task;private ImageView imageView;private static String url="http://b389.photo.store.qq.com/psb?/V1112Bib4N2Zv2/0Ahi.ZaLH*i0tsSy3dlWnUNIXOXdYXRbVdwdoUpfxwk!/m/dIUBAAAAAAAAnull&bo=OASgBQAAAAAFB70!&rf=photolist&t=5";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.progress);//控件實例化bar= (ProgressBar) findViewById(R.id.bar);imageView= (ImageView) findViewById(R.id.imageView);//創建對象task=new MyAsyncTask();//啟動異步處理task.execute(url);}class MyAsyncTask extends AsyncTask<String,Integer,Bitmap>{@Overrideprotected void onPreExecute() {super.onPreExecute();bar.setVisibility(View.VISIBLE);}@Overrideprotected Bitmap doInBackground(String... strings) {for (int i=0;i<100;i++){publishProgress(i);//傳遞進度值給onProgressUpdate方法try {Thread.sleep(300);} catch (InterruptedException e) {e.printStackTrace();}}String url=strings[0];URLConnection connection;Bitmap bitmap=null;InputStream is;try {connection=new URL(url).openConnection();is=connection.getInputStream();BufferedInputStream bis=new BufferedInputStream(is);Thread.sleep(3000);bitmap= BitmapFactory.decodeStream(bis);is.close();bis.close();} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}return bitmap;}/*** 這個方法是承接doInBackground()方法中的i的* 通過Integer方法所傳遞出來的i作用到了values數組上* */@Override //獲取進度更新值protected void onProgressUpdate(Integer... values) {super.onProgressUpdate(values);/*** 從values數組中傳遞過來的i作為mProgressBar的進度值* 由于這里只傳遞進來一個數,所以這里只需要獲取0就OK了~* */bar.setProgress(values[0]);}@Overrideprotected void onPostExecute(Bitmap bitmap) {super.onPostExecute(bitmap);bar.setVisibility(View.GONE);imageView.setImageBitmap(bitmap);}} }

最后運行下!看效果如何...

轉載于:https://www.cnblogs.com/zyl222/p/7595424.html

總結

以上是生活随笔為你收集整理的用AsyncTask来获取网络图片的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。