这两天啥也没学 ,因为快放假了 心里总是不能平静 ,老是想给自己放个小假,所以玩疯了。
还是自己控制不了自己。
下面写的是 关于 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