当我将Android studio中的文件导入到Eclipse中时,原本在Android studio中运行在真机上会加载网络图片,可是导入到Eclipse中却载入不了网络图片,而且进度条的样式也改变了。
MainAcitivity.java文件如下:
package com.example.imagedemo;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class MainActivity extends Activity implements View.OnClickListener {
private static final String[] params={
"http://p0.so.qhimg.com/bdr/_240_/t013971ecacef25bf25.jpg",
"http://p4.so.qhimg.com/t018349127914f495ce.jpg"
};
private Button btnFirst;
private ProgressBar progress;
private Bitmap bitmap=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnFirst = (Button) findViewById(R.id.btnFirst);
progress = (ProgressBar) findViewById(R.id.progress);
btnFirst.setOnClickListener(this);
}
@Override
public void onClick(View v) {
progress.setVisibility(View.VISIBLE);
progress.setMax(100);
MyASyncTask task = new MyASyncTask();
task.execute(params);
}
public class MyASyncTask extends AsyncTask<String, Integer, Bitmap> {
protected Bitmap doInBackground(String... params) {
int read;
byte[] chars = new byte[1024];
Bitmap bitmap=null;
InputStream inputStream = null;
try {
URL url = new URL(params[0]);
HttpURLConnection con=(HttpURLConnection) url.openConnection();
con.setDoInput(true);//如果不设置的话,默认是true,它的意思是如果需要读取url上网络的数据时,必须要设置成true
con.connect();
inputStream=con.getInputStream();//先要获取目标URL的地址的输入流
bitmap= BitmapFactory.decodeStream(inputStream);//通过BitmapFactory的decodeStream方法解析输入流
while((read=inputStream.read(chars))!=-1)
{
read+=chars.length;
publishProgress(read);
try {
Thread.sleep(1300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
inputStream.close();
}
catch (MalformedURLException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
@Override
protected void onProgressUpdate(Integer... values) {
//当publichProcess被调用以后,UI线程将调用这个有方法在界面上展示任务的情况,比如一个额进度条。这里是更新进度条
int value=values[0];
progress.setVisibility(View.VISIBLE);
progress.setBackgroundColor(Color.YELLOW);
progress.setProgress(value);
super.onProgressUpdate(values);
}
/*在 onPostExecute(Result) 中是请求获得结果后更新UI部分。你会看到他的参数就是我们类中的类型参数。代码如下*/
protected void onPostExecute(Bitmap Result){
ImageView imgView = (ImageView)findViewById(R.id.image);;
imgView.setImageBitmap(Result);
progress.setVisibility(View.VISIBLE); /*不显示进度条,当图片加载进来后,立马就占了进度条的位置*/
btnFirst.setText("图片下载完毕");
}
}
}
布局文件如下:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnFirst"
android:text="开始下载"/>
<ProgressBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/progress"
android:visibility="invisible"
android:max="100"
style="?android:attr/progressBarStyleHorizontal"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/image"
/>