zoukankan      html  css  js  c++  java
  • day04

    1网页源码查看器
        httpurlconnection类:用于发送或接收数据

        ScrollView  只能有一个亲孩子(但可以有很多孙子辈)
    1. package com.phone.weblook;
    2. import java.io.InputStream;
    3. import java.net.HttpURLConnection;
    4. import java.net.URL;
    5. import android.app.Activity;
    6. import android.os.Bundle;
    7. import android.os.StrictMode;
    8. import android.view.View;
    9. import android.widget.EditText;
    10. import android.widget.TextView;
    11. public class MainActivity extends Activity {
    12. private EditText et_path;
    13. private TextView tv_result;
    14. @Override
    15. protected void onCreate(Bundle savedInstanceState) {
    16. super.onCreate(savedInstanceState);
    17. setContentView(R.layout.activity_main);
    18. et_path = (EditText) findViewById(R.id.et_path);
    19. tv_result = (TextView) findViewById(R.id.tv_result);
    20. }
    21. //[2]点击按钮进行查看 指定路径的源码
    22. public void click(View v)
    23. {
    24. try {
    25. //[2.1]获取源码路径
    26. String path = et_path.getText().toString().trim();
    27. //[2.2]创建URL 对象指定我们要访问的网址(路径)
    28. URL url = new URL(path);
    29. //[2.3]拿到httpurlconnection对象 用于发送或者接受数据
    30. HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    31. //[2.4]设置发送get请求
    32. //get要求大写,默认为get请求
    33. conn.setRequestMethod("GET");
    34. //[2.5]设置请求超时时间
    35. conn.setConnectTimeout(5000);
    36. //[2.6]获取服务器返回的状态码
    37. int code = conn.getResponseCode();
    38. //[2.7]如果code == 200 说明请求成功
    39. if(code == 200)
    40. {
    41. //[2.8]获取服务器返回的数据 是以流的形式返回的
    42. // 由于把流转换成字符串是一个非常常见的操作 所以抽出一个工具类
    43. InputStream in = conn.getInputStream();
    44. //[2.9]使用我们定义的工具类把in转换成String
    45. String content = StreamTools.readStream(in);
    46. //[2.9]把流里面的数据展示到textview上
    47. tv_result.setText(content);
    48. }
    49. } catch (Exception e) {
    50. e.printStackTrace();
    51. }
    52. }
    53. }
    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    2. xmlns:tools="http://schemas.android.com/tools"
    3. android:layout_width="match_parent"
    4. android:layout_height="match_parent"
    5. android:orientation="vertical"
    6. tools:context="com.phone.weblook.MainActivity" >
    7. <EditText
    8. android:id="@+id/et_path"
    9. android:layout_width="match_parent"
    10. android:layout_height="wrap_content"
    11. android:hint="请输入查看网址" />
    12. <Button
    13. android:layout_width="wrap_content"
    14. android:layout_height="wrap_content"
    15. android:onClick="click"
    16. android:text="查看" />
    17. <ScrollView
    18. android:layout_width="match_parent"
    19. android:layout_height="wrap_content" >
    20. <TextView
    21. android:id="@+id/tv_result"
    22. android:layout_width="match_parent"
    23. android:layout_height="match_parent" />
    24. </ScrollView>
    25. </LinearLayout>

    2消息机制的写法(***)
        [1]ANR    Application not response 应用无响应  主线程(UI线程)
        [2]如果在主线程中进行了耗时的操作(比如连接网络 拷贝大的数据)
        [3]避免ANR 可以把耗时的操作 放到子线程中  自己再创建一个线程
        [4]在4.0之后谷歌强制要求连接网络不能再主线程进行访问
           09-11 10:32:32.932: W/System.err(10733): android.os.NetworkOnMainThreadException
        [5]只有主线程(UI线程)才可以更新UI
        [6]消息机制

    3handler原理(子线程传送数据给主线程)
        handler使用步骤
        [1]在主线程定义一个Handler
    1. private Handler handler = new Handler()
    2. {
    3. };
        [2]使用handler会重写handler里面的handleMessage方法
    1. private Handler handler = new Handler()
    2. {
    3. public void handleMessage(android.os.Message msg)
    4. {

    5. };
    6. };
        [3]拿着我们在主线程创建的handler去子线程发消息
        
    1. //[2.9.0]创建message对象
    2. Message msg = new Message();
    3. //发一条消息 消息里把数据放到了msg里handleMessage方法就会执行
    4. msg.obj = content;
    5. //[2.9.1]拿着我们创建的hangler(助手)告诉系统 说我要更新UI
    6. handler.sendMessage(msg);
        [4]handleMessage方法就会执行  在这个方法里去更新UI
    1. private Handler handler = new Handler()
    2. {
    3. public void handleMessage(android.os.Message msg)
    4. {
    5. //所以就可以在主线程里面更新Ui了
    6. String content = (String) msg.obj;
    7. tv_result.setText(content);
    8. };
    9. };

        handler的作用是用来发消息和处理消息的
        Looper的作用是去消息队列里面取消息
        Looper是在主线一创建Looper就有了
     

        规则:不管什么版本的手机,只要做耗时的操作(比如连接网络 比如拷贝大的数据 等等)就自己开一个子线程,获取数据后想要更新UI  就使用handler就可以了

    4图片查看器
        [1]把流信息转换成bitmap对象
        [2]bitmapFactory。decodeStream(inputStream in)
        [3]最后要加上网络访问权限


    5runOnUiThread写法
        [1]如果仅仅就是更新UI 那么就用runOnUIThread这个API就可以
        [2]有的时候可以通过Handler发送消息  携带数据  这时候必须的用handler

    6常见消息Api
        handler
    postDelayed方法延迟运行run函数
    1. new Handler().postDelayed(new Runnable() {
    2. @Override
    3. public void run() {
    4. Toast.makeText(getApplicationContext(), "ououououou", 0).show();
    5. }
    6. }, 5000);
        定时器Timer
    1. timer = new Timer();
    2. task = new TimerTask() {
    3. @Override
    4. public void run() {
    5. runOnUiThread(new Runnable() {
    6. @Override
    7. public void run() {
    8. Toast.makeText(getApplicationContext(), "ououououou", Toast.LENGTH_LONG).show();
    9. }
    10. });
    11. // System.out.println("asdfsdf");
    12. }
    13. };
    14. //5秒后执行
    15. // timer.schedule(task, 5000);
    16. //3秒后每隔一秒执行
    17. timer.schedule(task, 3000, 1000);


    7新闻客户端
       [1]UI效果是公司里面美工去画的
       [2]应用的传输数据 定义接口
       [3]关于xml的数据 是服务器开发人员通过一定的技术手段返回的 对应Android开发人员          我们要会解析就OK,把我们关心的数据取出来  展示到Android中控件上


    8开源项目smartimageview介绍
        [1]把com包 源码包拷贝到当前工程
        [2]在使用SmartImageView类的时候 在布局里面定义的时候  一定是这个类的完整包名 + 类名

    smartimageview原理介绍

    10今日总结
        [1]网页源码查看器(掌握)
            httpurlconnection
            服务器是以流的形式把数据返回    

        [2]消息机制(掌握)
            handler    当我想在子线程更新UI的时候需要使用到handler
        
        [3]图片查看器
             bitmapFactory  里面的方法都是静态方法 可以把一个流转换成bitmap
       
        [4]runOnUiThread()必须会

        [5]新闻客户端(包含前三天大多数知识点)
              listview   开子线程去取数据   handler    xml解析  baseAdapter

       [6]smartImageView(掌握)
       [7]自定义smartimageview(了解)   





    只言片语任我说,提笔句句无需忖。落笔不知寄何人,唯有邀友共斟酌。
  • 相关阅读:
    0918作业-----所有数值未做合法性检测
    尝试安装和配置JDK,并给出安装、配置JDK的步骤
    java为什么可以跨平台执行
    字符集
    java 入门及简介
    时间轴特效
    javascript简介
    javascript while循环
    Javascript for循环
    函数豹子问题
  • 原文地址:https://www.cnblogs.com/phonecom/p/7bac4f036f10bcb01af7aab6f84ac500.html
Copyright © 2011-2022 走看看