zoukankan      html  css  js  c++  java
  • android——HttpUrlConnection

    前面了解了下服务端和客户端的相关知识 ,那么他们是通过什么来进行进行连接的呢?

      Android可以用HttpURLConnection或HttpClient接口来开发http程序。在Android 上发送HTTP 请求的方式一般有两种,HttpURLConnection 和HttpClient本节将带来HttpUrlConnection的相关用法。

      案例:从网络获取一张图片并显示(用异步任务实现)

      但我们点击button的时候后台为我们获取网络图片并更新UI,如果成功会有个显示123的textview,否则则显示如下代码中的错误信息(下面紧 展示后台代码)

      1 package com.example.multithreadind01;
      2 
      3 import java.io.BufferedReader;
      4 import java.io.DataOutputStream;
      5 import java.io.File;
      6 import java.io.FileOutputStream;
      7 import java.io.InputStream;
      8 import java.io.InputStreamReader;
      9 import java.io.OutputStream;
     10 import java.net.HttpURLConnection;
     11 import java.net.MalformedURLException;
     12 import java.net.URL;
     13 import java.net.URLConnection;
     14 import java.net.URLEncoder;
     15 import java.util.List;
     16 
     17 import android.graphics.Bitmap;
     18 import android.graphics.BitmapFactory;
     19 import android.os.AsyncTask;
     20 import android.os.Environment;
     21 import android.view.View;
     22 import android.widget.BaseAdapter;
     23 import android.widget.ImageView;
     24 import android.widget.ProgressBar;
     25 import android.widget.TextView;
     26 import android.widget.Toast;
     27 
     28 public class MyTask extends AsyncTask {
     29 
     30     
     31     private Bitmap b;
     32     private MainActivity activity;
     33     public MyTask(MainActivity activity){
     34         this.activity = activity;
     35     }
     36     private String errorMessage = "";
     37     private String messageInfo = "";
     38     private static final String URL_IMG = "http://img.firefoxchina.cn/2016/12/8/201612080831150.jpg";
     39     private static final String URL_STR = "http://android2017.duapp.com/test1.jsp";
     40     
     41     
     42     //1.所有耗时的代码,写到这里来(数据库、蓝牙、网络服务)
     43     //2.绝对不能碰UI
     44     @Override
     45     protected Object doInBackground(Object... params) {
     46         try {
     47             
     48             URL url = new URL(URL_IMG);
     49             
     50             HttpURLConnection conn = (HttpURLConnection)url.openConnection();
     51             //设置超时
     52             conn.setConnectTimeout(6*1000);
     53             //对连接进行配置  设置输入输出流
     54             
     55             conn.setDoOutput(false);
     56             conn.setDoInput(true);
     57             
     58             设置请求方式
     59             conn.setRequestMethod("GET");
     60             //防止读取脏数据  
     61             conn.setUseCaches(false);
     62             
     63             if ( conn.getResponseCode() == 200){
     64                 //输入流
     65                 InputStream is = conn.getInputStream();
     66                 b =  BitmapFactory.decodeStream(is);
     67                 
     68                 // 保存图片相关
     69                 
     70                 FileOutputStream outStream = new FileOutputStream(new File(Environment.getExternalStorageDirectory()+"/"+"test.jpg"));
     71                 byte[] buffer = new byte[1024];
     72                 int len = -1;
     73                 while( (len = is.read(buffer)) != -1 ){
     74                     outStream.write(buffer, 0, len);
     75                     
     76                     
     77                 }
     78                 //b.compress(Bitmap.CompressFormat.JPEG, 100, outStream); 
     79                 
     80                 
     81                 outStream.close();
     82                 is.close();
     83                 
     84                 
     85                 return "123";
     86             }
     87             else{
     88                 errorMessage = "服务器繁忙,请稍后再试("+conn.getResponseCode()+")";
     89                 return "errorserver";
     90             }
     91             
     92         } catch (Exception e) {
     93             errorMessage = e.getMessage();
     94             return "errorclient";
     95         }
     96     }
     97     
     98     //准备
     99     @Override
    100     protected void onPreExecute() {
    101         Toast.makeText(activity, "开始执行...", Toast.LENGTH_SHORT).show();
    102         
    103     }
    104     
    105     //做完后执行
    106     @Override
    107     protected void onPostExecute(Object result) {
    108         String r = result.toString();
    109         TextView tv = (TextView)activity.findViewById(R.id.textView1);
    110         if ("errorclient".equals(r)){
    111             if (errorMessage.indexOf("No add")!=-1){
    112                 tv.setText("网络不通");
    113             }
    114             else{
    115                 tv.setText("访问网络时其它异常:"+errorMessage);
    116             }
    117             
    118         }else if("errorserver".equals(r)){
    119             tv.setText(errorMessage);
    120         }else{
    121             tv.setText(r);
    122             ImageView iv = (ImageView) activity.findViewById(R.id.img1);
    123             iv.setImageBitmap(b);
    124         }    
    125         
    126     }
    127     
    128     //分步完成
    129     @Override
    130     protected void onProgressUpdate(Object... values) {
    131         adapter.notifyDataSetChanged();
    132     }
    133 
    134 }

    效果图

      

    网络或其他错误时:

      

      

  • 相关阅读:
    winform 监视DataGridView的滚动条,加载数据
    SQL 自动生成行号
    SQL 删除重复的数据(多个字段判断),只保留一条数据
    C# 一个简单的 工厂模式 例子
    winform 重写TextBox的OnTextChanged方法(事件)
    winform 给文本框加载内容的时候 始终让文本框的滚动条到底(允许显示多行Multiline=True)
    winform 制定DataGridViewTextColumn列(更改DataGridView的Cell的状态很有用)
    winform 使用委托 实现多线程访问控件
    C# 一个简单的递归函数和 两个List<T> 合并
    ADO.NET  把数据库A的某表的数据内容复制到数据库B的某表内
  • 原文地址:https://www.cnblogs.com/mark0812/p/6164888.html
Copyright © 2011-2022 走看看