本文的目标是学习对网络图片的读取。
1、界面设计:
界面包括一个用于输入网络图片地址的TextView,一个Button用于提交用户请求。
界面代码如下:
<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"
tools:context="${relativePackage}.${activityClass}" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<EditText android:id="@+id/imagepath"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="http://img05.tooopen.com/images/20140919/sy_71272488121.jpg"
/>
<Button android:id="@+id/submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/submit"/>
<ImageView android:id="@+id/imageView"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>"
</LinearLayout>
2.功能实现:
package pub.tobest.netimage;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
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.os.Handler.Callback;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
public class MainActivity extends Activity {
EditText mEditText;
Button submitButton;
ImageView mImageView;
Handler handle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
Callback callBack=new Callback() {
@Override
public boolean handleMessage(Message msg) {
// TODO Auto-generated method stub
byte[] data=(byte[])msg.obj;
Bitmap bitMap=BitmapFactory.decodeByteArray(data, 0, data.length-1);
mImageView.setImageBitmap(bitMap);
return true;
}
};
handle=new Handler(callBack);
}
private void initView() {
// TODO Auto-generated method stub
mEditText=(EditText) findViewById(R.id.imagepath);
submitButton=(Button) findViewById(R.id.submit);
mImageView=(ImageView) findViewById(R.id.imageView);
submitButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
URL url=new URL(mEditText.getText().toString());
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
conn.setReadTimeout(1000);
conn.setRequestMethod("GET");
InputStream inputStream=null;
if(conn.getResponseCode()==200){
inputStream=conn.getInputStream();
}
ByteArrayOutputStream bOutPutStream=new ByteArrayOutputStream();
byte[] data=new byte[1024];
int len=0;
while((len=inputStream.read(data))!=-1){
bOutPutStream.write(data,0,data.length-1);
}
byte[] bytes=bOutPutStream.toByteArray();
Message msg=new Message();
msg.obj=bytes;
handle.sendMessage(msg);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
});
}
}
3.总结:
对网络图片的读取,主要使用到HttpURLConnection类和InputStream、OutputStream类。