android Handler Thread AsyncTask httpURLConnection

这两天啥也没学 ,因为快放假了  心里总是不能平静 ,老是想给自己放个小假,所以玩疯了。

还是自己控制不了自己。



下面写的是 关于 httpURLConnection 的使用顺便把  线程,异步用上了  这也是必须的,

根据API来说 ,对于定时 或延时操作,一般不允许在UI的这个主线程中运行,从网络上获取数据,这是一个延时的操作,所以

不能写在这个UI线程中,我们可以进行创建一个新的线程把这个事件放入新的线程中进行运行,这样才能稳定的运行,

 

对于new一个Thread 在run方法中直接进行填充需要做的线程这是不行的,没办法启动这个线程,我们需要借助这个Handler进行处理这个

线程。API第一句话上说的就是一个 handler 通过一个Message进行与 一个Thread相关连。


我主要是学的HttpURLConnection 这个使用 ,他必须制定请求方式,如果不指定使用方式,默认的是GET方式,

我看的视频学习的例子是使用的HttpClient类但是这个类已经费用了,说什么方法方法太多,管理起来麻烦。

还是学习这个HttpUrlConnection这个类吧,这个方法没骂么多,用起来学习起来比较方便 。




看代码把 比较直接的清楚。


一、xml


<span style="font-size:18px;color:#996633;"><?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.he_jingzhou.downloadwebimage.MainActivity"
    android:background="@drawable/aaa">

    <Button
        android:id="@+id/buttonWeb"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="访问网页"/>
    <Button
        android:id="@+id/buttonImage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="下载图片"
        android:layout_below="@+id/buttonWeb"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/buttonImage"
        android:layout_centerHorizontal="true" />
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/imageView">
       <TextView
           android:id="@+id/textViewShow"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content" />
    </ScrollView>

</RelativeLayout></span><span style="color:#cc0000;">
</span>


二、MainActivity

package com.example.he_jingzhou.downloadwebimage;

<span style="font-size:18px;">import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class MainActivity extends AppCompatActivity {
    private Button buttonWeb,buttonImage;
    private TextView textViewShowWeb;
    private ImageView imageView;
    private Thread thread;
    private android.os.Handler handler;
    private String result = "";
    private Bitmap bitmap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initFindViewById();

        buttonWeb.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                imageView.setVisibility(View.GONE);
                textViewShowWeb.setVisibility(View.VISIBLE);
                handler = new android.os.Handler() {
                    public void handleMessage(Message msg) {
                        switch (msg.what) {
                            case 0:
                                textViewShowWeb.setText((String) msg.obj);
                        }
                    }

                };

                String WebData = getWebData("https://api.heweather.com/x3/weather?cityid=CN101120301&key=25fbaabf37a1477a9e1a29d62c00ed8e");
                textViewShowWeb.setText(WebData);
            }
        });

        buttonImage.setOnClickListener(new View.OnClickListener() {
            String Download_Path = "http://img4q.duitang.com/uploads/item/201201/07/20120107141413_uzFtW.jpg";

            @Override
            public void onClick(View v) {
                textViewShowWeb.setVisibility(View.GONE);
                imageView.setVisibility(View.VISIBLE);
                NewAsyncTask newAsyncTask = new NewAsyncTask();
                newAsyncTask.execute(Download_Path);

            }
        });
    }

    private void initFindViewById() {
        buttonImage = (Button)findViewById(R.id.buttonImage);
        buttonWeb = (Button)findViewById(R.id.buttonWeb);
        textViewShowWeb = (TextView)findViewById(R.id.textViewShow);
        imageView = (ImageView)findViewById(R.id.imageView);
    }

    /**
     * 访问网页
     */
    public String getWebData(final String Url_path) {

        thread = new Thread(new Runnable() {
            @Override
            public void run() {
                InputStream inputStream = null;
                InputStreamReader inputStreamReader = null;
                BufferedReader bufferedReader = null;
                try {

                    URL url = new URL(Url_path);
                    HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                    httpURLConnection.setRequestMethod("GET");//设置GET请求方式
                    httpURLConnection.setDoInput(true);</span><span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif;">//允许输入流</span><span style="font-size:18px;">
                    httpURLConnection.setDoOutput(true);//允许输出流</span><pre name="code" class="java">
httpURLConnection.setUseCaches(false);//不使用缓冲 System.out.println(httpURLConnection.getResponseCode()); if (httpURLConnection.getResponseCode() == 200) { inputStream = httpURLConnection.getInputStream(); inputStreamReader = new InputStreamReader(inputStream); bufferedReader = new BufferedReader(inputStreamReader); String readerLine = ""; while ((readerLine = bufferedReader.readLine()) != null) { result += readerLine; Log.i("readerLine", readerLine); } } if (httpURLConnection != null) { httpURLConnection.disconnect(); } if (inputStream != null) { inputStream.close(); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } Message message = Message.obtain(); message.obj = result; message.what = 0; handler.sendMessage(message); } }); thread.start(); return result; } /** * 下载图片 */ //参数1 传进来的参数类型, 参数2 进度的参数, 参数3 处理完的数据返回的数据类型。 class NewAsyncTask extends AsyncTask<String,Integer,Bitmap> { @Override /** * onPreExecute在执行后台成程序之前运行 多为提示 或者进度条 */ protected void onPreExecute() { super.onPreExecute(); Toast.makeText(MainActivity.this,"准备下载....",Toast.LENGTH_SHORT).show(); } @Override /** * doInBackground运行后台程序 */ protected Bitmap doInBackground(String... params) { try { URL downLoadUrl = new URL(params[0]); HttpURLConnection httpURLConnection = (HttpURLConnection)downLoadUrl.openConnection(); InputStream inputStream = httpURLConnection.getInputStream(); bitmap = BitmapFactory.decodeStream(inputStream); inputStream.close(); } catch (MalformedURLException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } return bitmap; } @Override /** * onPostExecute后台程序运行完后进行执行的 多是返回结果 对结果进行操作 */ protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); imageView.setImageBitmap(bitmap); Toast.makeText(MainActivity.this,"下载完毕",Toast.LENGTH_SHORT).show(); } }}
 
 


结果





源代码 (Android Studio):http://download.csdn.net/detail/csdnhejingzhou/9387815

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值