1、Handler

主文件:MainActivity.java

  1. package com.example.asynctaskdownload;
  2.  
  3. import java.io.IOException;
  4.  
  5. import org.apache.http.HttpEntity;
  6. import org.apache.http.HttpResponse;
  7. import org.apache.http.StatusLine;
  8. import org.apache.http.client.ClientProtocolException;
  9. import org.apache.http.client.HttpClient;
  10. import org.apache.http.client.methods.HttpGet;
  11. import org.apache.http.impl.client.DefaultHttpClient;
  12. import org.apache.http.util.EntityUtils;
  13.  
  14. import android.app.Activity;
  15. import android.os.Bundle;
  16. import android.os.Handler;
  17. import android.os.Message;
  18. import android.view.View;
  19. import android.view.View.OnClickListener;
  20. import android.widget.Button;
  21. import android.widget.TextView;
  22.  
  23. public class MainActivity extends Activity {
  24. protected static final int SHOW_RESPONSE = 0;
  25. /** Called when the activity is first created. */
  26. private TextView textView;
  27. private String result = "";
  28.  
  29. /////////////////////////////////////////////////////////
  30. private Handler handler = new Handler(){
  31.  
  32. public void handleMessage(Message msg)
  33. {
  34. switch(msg.what){
  35. case SHOW_RESPONSE:
  36. String result = (String)msg.obj;
  37. //注意是在此处进行UI操作
  38. textView.setText(result);
  39. }
  40. }
  41. };
  42. /////////////////////////////////////////////////////
  43. @Override
  44. public void onCreate(Bundle savedInstanceState) {
  45. super.onCreate(savedInstanceState);
  46. setContentView(R.layout.activity_main);
  47. textView = (TextView) findViewById(R.id.TextView01);
  48. Button button = (Button) findViewById(R.id.readWebpage);
  49. button.setOnClickListener(new OnClickListener()
  50. {
  51.  
  52. @Override
  53. public void onClick(View v) {
  54. //
  55. //textView.setText(result);
  56. if(v.getId() == R.id.readWebpage)
  57. {
  58. sendRequestHttpUrl();
  59. }
  60. }
  61.  
  62. });
  63. }
  64. ////////////////////////////////////////////////////////
  65. protected void sendRequestHttpUrl() {
  66. // TODO Auto-generated method stub
  67. //
  68. new Thread(new Runnable()
  69. {
  70.  
  71. @Override
  72. public void run() {
  73. //
  74.  
  75. try
  76. {
  77. HttpClient client = new DefaultHttpClient();
  78. HttpGet httpGet = new HttpGet("http://10.0.2.2:8080/mp3/a1.lrc");
  79.  
  80. HttpResponse response = client.execute(httpGet);
  81. StatusLine statusLine = response.getStatusLine();
  82. int statusCode = statusLine.getStatusCode();
  83. if (statusCode == 200) {
  84. HttpEntity entity = response.getEntity();
  85. //关于此处中文乱码问题解决?文本文件保存时,文本文档默认为ANSI编码格式,另存为时手动改为utf-8格式即可
  86. result = EntityUtils.toString(entity, "utf-8");
  87. }
  88. Message message = new Message();
  89. message.what = SHOW_RESPONSE;
  90. message.obj = result.toString();
  91. handler.sendMessage(message);
  92. }catch(Exception ex)
  93. {
  94. ex.printStackTrace();
  95. }
  96.  
  97. }
  98.  
  99. }
  100. ).start();
  101. }
  102. }

activity_main.xml文件

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6.  
  7. <Button
  8. android:id="@+id/readWebpage"
  9. android:layout_width="match_parent"
  10. android:layout_height="wrap_content"
  11. android:onClick="onClick"
  12. android:text="Load Webpage" >
  13. </Button>
  14. <ScrollView
  15. android:layout_width="match_parent"
  16. android:layout_height="match_parent">
  17. <TextView
  18. android:id="@+id/TextView01"
  19. android:layout_width="match_parent"
  20. android:layout_height="match_parent"
  21. android:text="Placeholder" >
  22. </TextView>
  23. </ScrollView>
  24.  
  25. </LinearLayout>

运行结果:

2、AnyscTask

主代码:

  1. package com.example.asynctaskdownload;
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.InputStreamReader;
  7.  
  8. import org.apache.http.HttpEntity;
  9. import org.apache.http.HttpResponse;
  10. import org.apache.http.client.methods.HttpGet;
  11. import org.apache.http.impl.client.DefaultHttpClient;
  12. import org.apache.http.util.EntityUtils;
  13.  
  14. import android.app.Activity;
  15. import android.os.AsyncTask;
  16. import android.os.Bundle;
  17. import android.os.Environment;
  18. import android.view.View;
  19. import android.view.View.OnClickListener;
  20. import android.widget.Button;
  21. import android.widget.TextView;
  22. import android.widget.Toast;
  23.  
  24. public class MainActivity extends Activity {
  25. private TextView textView;
  26.  
  27. private final String fileName = "a1.lrc";
  28. //private final String fileUrl = "http://10.0.2.2:8080/mp3/a1.lrc";
  29. private int result = Activity.RESULT_CANCELED;
  30. private String response = "";
  31.  
  32. @Override
  33. public void onCreate(Bundle savedInstanceState) {
  34. super.onCreate(savedInstanceState);
  35. setContentView(R.layout.activity_main);
  36. textView = (TextView) findViewById(R.id.TextView01);
  37. Button button = (Button) findViewById(R.id.readWebpage);
  38. button.setOnClickListener(new OnClickListener()
  39. {
  40.  
  41. @Override
  42. public void onClick(View v) {
  43. //
  44.  
  45. DownloadWebPageTask task = new DownloadWebPageTask();
  46. //task.execute(new String[] { "http://www.vogella.com" });
  47. task.execute(new String[] { "http://10.0.2.2:8080/mp3/a1.lrc" });
  48. Toast.makeText(MainActivity.this, "Download Success!", Toast.LENGTH_LONG).show();
  49.  
  50. // textView.setText(response);
  51. }
  52.  
  53. });
  54. }
  55.  
  56. private class DownloadWebPageTask extends AsyncTask<String, Void, Integer> {
  57. @Override
  58. protected Integer doInBackground(String... urls) {
  59. //获取sdcard的路径,以及设置保存的文件名
  60. File output = new File(Environment.getExternalStorageDirectory(), fileName);
  61. if(output.exists())
  62. {
  63. output.delete();//若同名文件已存在则删除
  64. }
  65.  
  66. // String response = "";
  67. InputStream content = null;
  68. FileOutputStream fos = null;
  69. //遍历url数组中的url,采用HttpClient(接口)的方式访问网络
  70. for (String url : urls) {
  71. //首先创建一个DefaultHttpClient实例
  72. DefaultHttpClient client = new DefaultHttpClient();
  73. HttpGet httpGet = new HttpGet(url);//发起一个GET请求,创建一个HttpGet对象,并传入目标网络地址
  74. try {
  75. HttpResponse execute = client.execute(httpGet);//调用execute执行访问请求并返回一个HttpResponse对象
  76. if(execute.getStatusLine().getStatusCode() == 200)
  77. {
  78. //注:下面两行code只能使用其中一个:content will be consume only once
  79. //execute.getEntity()调用了两次
  80. // content = execute.getEntity().getContent();//获取服务返回的具体内容
  81. //调用EntityUtils.toString该静态方法将HttpEntity转换成字符串,为避免中文字符乱码,添加utf-8字符集参数
  82. // response = EntityUtils.toString(execute.getEntity(), "utf-8");
  83. //////////////////////////////////////////////////////////////////////////////
  84. HttpEntity entity = execute.getEntity();
  85. // response = EntityUtils.toString(entity, "utf-8");
  86. content = entity.getContent();
  87.  
  88. }
  89.  
  90. //利用管道 inputstream-->reader
  91. InputStreamReader reader = new InputStreamReader(content);
  92. fos = new FileOutputStream(output.getPath());
  93.  
  94. int next = -1;
  95. while ((next = reader.read()) != -1) {
  96. fos.write(next);
  97. }
  98.  
  99. result = Activity.RESULT_OK;
  100.  
  101. // BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
  102.  
  103. // String s = "";
  104. // while ((s = buffer.readLine()) != null) {
  105. // response += s;
  106. // }
  107.  
  108. } catch (Exception e) {
  109. e.printStackTrace();
  110. }finally {
  111. if (content != null) {
  112. try {
  113. content.close();
  114. } catch (IOException e) {
  115. e.printStackTrace();
  116. }
  117. }
  118. if (fos != null) {
  119. try {
  120. fos.close();
  121. } catch (IOException e) {
  122. e.printStackTrace();
  123. }
  124. }
  125. }
  126. }
  127. return result;
  128. }
  129.  
  130. protected void onPostExecute(Integer result) {
  131. //此处可以根据后台任务完成后返回的结果进行一些UI操作
  132.  
  133. if(result == Activity.RESULT_OK)
  134. {
  135. textView.setText("mp3 file download success!!");
  136. }
  137. }
  138.  
  139. /* public void onClick(View view) {
  140. DownloadWebPageTask task = new DownloadWebPageTask();
  141. //task.execute(new String[] { "http://www.vogella.com" });
  142. task.execute(new String[] { "http://10.0.2.2:8080/mp3/a1.lrc" });
  143.  
  144. }*/
  145.  
  146. }
  147. }

activity_main.xml文件同上

运行结果:成功下载文件a1.lrc到sdcard中

handler以及AnyscTask处理机制的更多相关文章

  1. Android正在使用Handler实现信息发布机制(一)

    上一篇文章,我们谈到了电话Handler的sendMessage方法,最后,我们将进入一个电话 sendMessageAtTime方法,例如下列: public boolean sendMessage ...

  2. Android正在使用Handler实现消息分发机制(零)

    演讲前,AsyncTask文章.我们在最后谈到.AsyncTask它是利用Handler异步消息处理机制,操作结果.使用Message回到主线程,从而执行UI更新线程. 而在我们的日常开发工作,Han ...

  3. Android Handler MessageQueue Looper 消息机制原理

    提到Android里的消息机制,便会提到Message.Handler.Looper.MessageQueue这四个类,我先简单介绍以下这4个类 之间的爱恨情仇. Message 消息的封装类,里边存 ...

  4. Android正在使用Handler实现消息分发机制(两)

    在开始这篇文章之前,.首先,我们在总结前两篇文章Handler, Looper和MessageQueue像一些关键点: 0)在创建线程Handler之前,你必须调用Looper.prepare(), ...

  5. android的消息处理机制——Looper,Handler,Message

    在开始讨论android的消息处理机制前,先来谈谈一些基本相关的术语. 通信的同步(Synchronous):指向客户端发送请求后,必须要在服务端有回应后客户端才继续发送其它的请求,所以这时所有请求将 ...

  6. Android多线程机制和Handler的使用

    参考教程:iMooc关于Handler,http://www.imooc.com/learn/267 参考资料:Google提供Android文档Communicating with the UI T ...

  7. Android Handler处理机制 ( 一 )(图+源码分析)——Handler,Message,Looper,MessageQueue

    android的消息处理机制(图+源码分析)——Looper,Handler,Message 作为一个大三的预备程序员,我学习android的一大乐趣是可以通过源码学习 google大牛们的设计思想. ...

  8. Android的消息处理机制Looper,Handler,Message

    android的消息处理有三个核心类:Looper,Handler和Message.其实还有一个Message Queue(消息队列),但是MQ被封装到Looper里面了,我们不会直接与MQ打交道,因 ...

  9. 转 Android的消息处理机制(图+源码分析)——Looper,Handler,Message

    作为一个大三的预备程序员,我学习android的一大乐趣是可以通过源码学习google大牛们的设计思想.android源码中包含了大量的设计模式,除此以外,android sdk还精心为我们设计了各种 ...

随机推荐

  1. 【转】Tomcat总体结构(Tomcat源代码阅读系列之二)

    本文是Tomcat源代码阅读系列的第二篇文章,我们在本系列的第一篇文章:在IntelliJ IDEA 和 Eclipse运行tomcat 7源代码一文中介绍了如何在intelliJ IDEA 和 Ec ...

  2. Three.js基础探寻十——动画

    本篇将介绍如果使用Three.js进行动态画面的渲染.此外,将会介绍一个Three.js作者写的另外一个库stat.js,用来观测每秒帧数(FPS). 1.实现动画效果 1.1 动画原理 对于Thre ...

  3. npm 介绍

    安装NPM NPM的全称是Node Package Manager,如果你熟悉ruby的gem,Python的PyPL.setuptools,PHP的pear,那么你就知道NPM的作用是什么了.没 错 ...

  4. 随机删除数据库N条记录

    delete from  table where newsID in(select top 50 newsID from  table order by newid())

  5. break和continue的区别以及标签label的使用

    break表示直接跳出当前循环,break只能运用于switch--case语句以及循环之中 continue则表示跳出当次循环,继续执行下一次循环 label标签则可以选择break,或者conti ...

  6. [摘录] 关于 java 并发包

    1.http://www.raychase.net/698 Java多线程发展简史

  7. JavaScript读写脚txt文件

    1.cmd切换到“C:\Windows\System32>”下,执行“regsvr32 Scrrun.dll” 2.JavaScript读写txt文本代码如下,注意要发布到服务器上 <!D ...

  8. Java基础(44):ArrayList使用详解

    1.什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处:    a.动态的增加和减少元素    b.实现了IColle ...

  9. springday02-go2

    1.复制xml文件到container.auto下2.Waiter类实现构造函数3.Bar类中Waiter作为其成员变量,并实现其get/set方法,有参和无参构造器,toString方法4.分别修改 ...

  10. 比较二个文件的最后修改时间FileListener

    import java.io.File; import java.text.SimpleDateFormat; import java.util.Timer; import java.util.Tim ...