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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android之查看网络图片和网页HTML

發布時間:2024/7/23 Android 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android之查看网络图片和网页HTML 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

網絡編程是Android應用中很重要的一部分,本文主要講述了利用HttpURLConnection獲取網絡圖片和HTML的方法。

獲取網絡圖片

public class MainActivity extends Activity implements OnClickListener {private static final String TAG = "MainActivity";protected static final int ERROR = 1;private EditText etUrl;private ImageView ivIcon;private final int SUCCESS = 0;private Handler handler = new Handler() {/*** 接收消息*/@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);Log.i(TAG, "what = " + msg.what);if(msg.what == SUCCESS) { // 當前是訪問網絡, 去顯示圖片ivIcon.setImageBitmap((Bitmap) msg.obj); // 設置imageView顯示的圖片} else if(msg.what == ERROR) {Toast.makeText(MainActivity.this, "抓去失敗", 0).show();}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ivIcon = (ImageView) findViewById(R.id.iv_icon);etUrl = (EditText) findViewById(R.id.et_url);findViewById(R.id.btn_submit).setOnClickListener(this);}@Overridepublic void onClick(View v) {final String url = etUrl.getText().toString();new Thread(new Runnable() {@Overridepublic void run() {Bitmap bitmap = getImageFromNet(url);// ivIcon.setImageBitmap(bitmap); // 設置imageView顯示的圖片if(bitmap != null) {Message msg = new Message();msg.what = SUCCESS;msg.obj = bitmap;handler.sendMessage(msg);} else {Message msg = new Message();msg.what = ERROR;handler.sendMessage(msg);}}}).start();}/*** 根據url連接取網絡抓去圖片返回* @param url* @return url對應的圖片*/private Bitmap getImageFromNet(String url) {HttpURLConnection conn = null;try {URL mURL = new URL(url); // 創建一個url對象// 得到http的連接對象conn = (HttpURLConnection) mURL.openConnection();conn.setRequestMethod("GET"); // 設置請求方法為Getconn.setConnectTimeout(10000); // 設置連接服務器的超時時間, 如果超過10秒鐘, 沒有連接成功, 會拋異常conn.setReadTimeout(5000); // 設置讀取數據時超時時間, 如果超過5秒, 拋異常conn.connect(); // 開始鏈接int responseCode = conn.getResponseCode(); // 得到服務器的響應碼if(responseCode == 200) {// 訪問成功InputStream is = conn.getInputStream(); // 獲得服務器返回的流數據Bitmap bitmap = BitmapFactory.decodeStream(is); // 根據 流數據 創建一個bitmap位圖對象return bitmap;} else {Log.i(TAG, "訪問失敗: responseCode = " + responseCode);}} catch (Exception e) {e.printStackTrace();} finally {if(conn != null) {conn.disconnect(); // 斷開連接}}return null;} }

不能子線程中改變主線程頁面,故需要使用Handler

上面的方法較為煩瑣,使用github上的開源庫,android-smart-image-view可以有效的實現相同的功能,同時簡化操作,使用方法是將開源庫src文件夾下的內容復制一份到工程中,同時在布局文件中,使用全類名使用自定義控件SmartImageView即可.

android-smart-image-view實現

public class MainActivity2 extends Activity implements OnClickListener {private EditText etUrl;private SmartImageView mImageView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);etUrl = (EditText) findViewById(R.id.et_url);mImageView = (SmartImageView) findViewById(R.id.iv_icon);findViewById(R.id.btn_submit).setOnClickListener(this);}@Overridepublic void onClick(View v) {// 1. 取出url, 抓取圖片String url = etUrl.getText().toString();mImageView.setImageUrl(url);} }

查看網頁HTML實現

public class MainActivity extends Activity {private static final String TAG = "MainActivity";private static final int SUCCESS = 0;protected static final int ERROR = 1;private EditText etUrl;private TextView tvHtml;private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case SUCCESS:tvHtml.setText((String) msg.obj);break;case ERROR:Toast.makeText(MainActivity.this, "訪問失敗", 0).show();break;default:break;}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);etUrl = (EditText) findViewById(R.id.et_url);tvHtml = (TextView) findViewById(R.id.tv_html);}public void getHtml(View v) {final String url = etUrl.getText().toString();new Thread(new Runnable() {@Overridepublic void run() {// 請求網絡String html = getHtmlFromInternet(url);if(!TextUtils.isEmpty(html)) {// 更新textview的顯示了Message msg = new Message();msg.what = SUCCESS;msg.obj = html;handler.sendMessage(msg);} else {Message msg = new Message();msg.what = ERROR;handler.sendMessage(msg);}}}).start();}/*** 根據給定的url訪問網絡, 抓去html代碼* @param url* @return*/protected String getHtmlFromInternet(String url) {try {URL mURL = new URL(url);HttpURLConnection conn = (HttpURLConnection) mURL.openConnection();conn.setRequestMethod("GET");conn.setConnectTimeout(10000);conn.setReadTimeout(5000);// conn.connect();int responseCode = conn.getResponseCode();if(responseCode == 200) {InputStream is = conn.getInputStream();String html = getStringFromInputStream(is);return html;} else {Log.i(TAG, "訪問失敗: " + responseCode);}} catch (Exception e) {e.printStackTrace();}return null;}/*** 根據流返回一個字符串信息* @param is* @return* @throws IOException */private String getStringFromInputStream(InputStream is) throws IOException {ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = -1;while((len = is.read(buffer)) != -1) {baos.write(buffer, 0, len);}is.close();String html = baos.toString(); // 把流中的數據轉換成字符串, 采用的編碼是: utf-8String charset = "utf-8";if(html.contains("gbk") || html.contains("gb2312")|| html.contains("GBK") || html.contains("GB2312")) { // 如果包含gbk, gb2312編碼, 就采用gbk編碼進行對字符串編碼charset = "gbk";}html = new String(baos.toByteArray(), charset); // 對原有的字節數組進行使用處理后的編碼名稱進行編碼baos.close();return html;} }

使用這種方法HTML有時會產生亂碼,解決方法如上

完成

總結

以上是生活随笔為你收集整理的Android之查看网络图片和网页HTML的全部內容,希望文章能夠幫你解決所遇到的問題。

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