Android开发(13)-- 互联网访问图片,在android客户端显示

来源:互联网 发布:龙虎榜数据分析软件2.3 编辑:程序博客网 时间:2024/05/01 06:28

1、布局界面

[html] view plaincopyprint?
  1. <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:paddingBottom="@dimen/activity_vertical_margin"
  6. android:paddingLeft="@dimen/activity_horizontal_margin"
  7. android:paddingRight="@dimen/activity_horizontal_margin"
  8. android:paddingTop="@dimen/activity_vertical_margin"
  9. tools:context=".MainActivity">
  10. <EditText
  11. android:id="@+id/url_text"
  12. android:layout_width="wrap_content"
  13. android:layout_height="wrap_content"
  14. android:layout_alignParentLeft="true"
  15. android:layout_alignParentRight="true"
  16. android:layout_alignParentTop="true"
  17. android:ems="10"
  18. android:inputType="textPostalAddress"
  19. android:text="@string/url_text">
  20. <requestFocus />
  21. </EditText>
  22. <Button
  23. android:id="@+id/btn_text"
  24. android:layout_width="wrap_content"
  25. android:layout_height="wrap_content"
  26. android:layout_alignLeft="@+id/url_text"
  27. android:layout_below="@+id/url_text"
  28. android:layout_marginTop="32dp"
  29. android:onClick="sendHttp"
  30. android:text="@string/btn_text"/>
  31. <ImageView
  32. android:id="@+id/iv_ie"
  33. android:layout_width="wrap_content"
  34. android:layout_height="wrap_content"
  35. android:layout_alignParentBottom="true"
  36. android:layout_alignParentLeft="true"
  37. android:layout_alignRight="@+id/url_text"
  38. android:layout_below="@+id/btn_text"
  39. android:src="@drawable/ic_launcher"/>
  40. </RelativeLayout>

2、封转的一些类

URL的封装:

[java] view plaincopyprint?
  1. package com.example.lession08_code.utis;
  2. import java.io.InputStream;
  3. import java.net.HttpURLConnection;
  4. import java.net.URL;
  5. import android.graphics.Bitmap;
  6. import android.graphics.BitmapFactory;
  7. public class HttpUtils {
  8. public static String sendGet(String path){
  9. String content=null;
  10. try{
  11. //设置访问的url
  12. URL url=new URL(path);
  13. //打开请求
  14. HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection();
  15. //设置请求的信息
  16. httpURLConnection.setRequestMethod("GET");
  17. //设置请求是否超时
  18. httpURLConnection.setConnectTimeout(5000);
  19. //判断服务器是否响应成功
  20. if(httpURLConnection.getResponseCode()==200){
  21. //获取响应的输入流对象
  22. InputStream is=httpURLConnection.getInputStream();
  23. byte data[]=StreamTools.isTodata(is);
  24. //把转换成字符串
  25. content=new String(data);
  26. //内容编码方式
  27. if(content.contains("gb2312")){
  28. content=new String(data,"gb2312");
  29. }
  30. }
  31. //断开连接
  32. httpURLConnection.disconnect();
  33. }catch(Exception e){
  34. e.printStackTrace();
  35. }
  36. return content;
  37. }
  38. public static Bitmap sendGets(String path){
  39. Bitmap bitmap=null;
  40. try{
  41. //设置访问的url
  42. URL url=new URL(path);
  43. //打开请求
  44. HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection();
  45. //设置请求的信息
  46. httpURLConnection.setRequestMethod("GET");
  47. //设置请求是否超时
  48. httpURLConnection.setConnectTimeout(5000);
  49. //判断服务器是否响应成功
  50. if(httpURLConnection.getResponseCode()==200){
  51. //获取响应的输入流对象
  52. InputStream is=httpURLConnection.getInputStream();
  53. //直接把is的流转换成Bitmap对象
  54. bitmap=BitmapFactory.decodeStream(is);
  55. }
  56. //断开连接
  57. httpURLConnection.disconnect();
  58. }catch(Exception e){
  59. e.printStackTrace();
  60. }
  61. return bitmap;
  62. }
  63. }


判断网络是否连接的封装类

[java] view plaincopyprint?
  1. package com.example.lession08_code.utis;
  2. import android.app.AlertDialog;
  3. import android.content.ComponentName;
  4. import android.content.Context;
  5. import android.content.DialogInterface;
  6. import android.content.Intent;
  7. import android.net.ConnectivityManager;
  8. import android.net.NetworkInfo;
  9. import android.widget.Toast;
  10. public class NetWorkUtils {
  11. private Context context;
  12. // 网路链接管理对象
  13. public ConnectivityManager connectivityManager;
  14. public NetWorkUtils(Context context) {
  15. this.context = context;
  16. // 获取网络链接的对象
  17. connectivityManager = (ConnectivityManager) context
  18. .getSystemService(Context.CONNECTIVITY_SERVICE);
  19. }
  20. public boolean setActiveNetWork() {
  21. boolean flag=false;
  22. // 获取可用的网络链接对象
  23. NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
  24. if (networkInfo == null) {
  25. new AlertDialog.Builder(context)
  26. .setTitle("网络不可用")
  27. .setMessage("可以设置网络?")
  28. .setPositiveButton("确认",
  29. new DialogInterface.OnClickListener() {
  30. @Override
  31. public void onClick(DialogInterface dialog,
  32. int which) {
  33. Toast.makeText(context, "点击确认",
  34. Toast.LENGTH_LONG).show();
  35. // 声明意图
  36. Intent intent = new Intent();
  37. intent.setAction(Intent.ACTION_MAIN);
  38. intent.addCategory("android.intent.category.LAUNCHER");
  39. intent.setComponent(new ComponentName(
  40. "com.android.settings",
  41. "com.android.settings.Settings"));
  42. intent.setFlags(0x10200000);
  43. // 执行意图
  44. context.startActivity(intent);
  45. }
  46. })
  47. .setNegativeButton("取消",
  48. new DialogInterface.OnClickListener() {
  49. @Override
  50. public void onClick(DialogInterface dialog,
  51. int which) {
  52. }
  53. }).show();// 必须.show();
  54. }
  55. if(networkInfo!=null){
  56. flag=true;
  57. }
  58. return flag;
  59. }
  60. }


输出流的封装类

[java] view plaincopyprint?
  1. package com.example.lession08_code.utis;
  2. import java.io.ByteArrayOutputStream;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. public class StreamTools {
  6. public staticbyte[] isTodata(InputStream is) throws IOException{
  7. //字节输出流
  8. ByteArrayOutputStream bops=new ByteArrayOutputStream();
  9. //读取数据的缓冲区
  10. byte buffer[]=newbyte[1024];
  11. //读取记录的长度
  12. int len=0;
  13. while((len=is.read(buffer))!=-1){
  14. bops.write(buffer, 0, len);
  15. }
  16. //把读取的内容转换成byte数组
  17. byte data[]=bops.toByteArray();
  18. return data;
  19. }
  20. }



注意:在这里还需要加权限问题

[java] view plaincopyprint?
  1. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  2. <uses-permission android:name="android.permission.INTERNET"/>