Android 编写一个环节检测的小案例 - 奇乐云's blog - 奇乐云的个人博客

会飞的鱼

奇乐云
首页 » Android » Android 编写一个环节检测的小案例

Android 编写一个环节检测的小案例

本篇文章涉及内容
json解析 post get请求 io流转换 
多线程  和ui线程  

重点在于
联网记得开权限
请求记得开线程
更新ui记得开主线程
耗时操作开线程
多任务处理线程开太多没有好处,cpu就那么点核。来回切换线程耗时间

Demo代码演示

[1]创建一个主窗口
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <VideoView
        android:id="@+id/videoView"
        android:layout_width="wrap_content"
        android:layout_height="212dp"/>

    <TextView
        android:id="@+id/hj"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dip"
        android:text="TextView" />

    <TextView
        android:id="@+id/jy"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"/>
</LinearLayout>

[2]编写一个io流转换String 类
package com.example.a15411.tianqi;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;

public class IoString {
    public static String readStream(InputStream in)throws Exception{
        //创建字节数组输出流 ,用来输出读取到的内容
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        //创建读取缓存,大小为1024
        byte[] buffer = new byte[1024];
        //每次读取长度
        int len = -1;
        //in.read(buffer) 把in里面的数据存入buffer数组 返回的是一个长度
        while ((len=in.read(buffer))!=-1){//当等于-1说明没有数据可以读取了
            baos.write(buffer,0,len);// 把读取的内容写入到输出流中
        }
        //关闭输出流
        in.close();
        //把读取到的字节数组转换为字符串
        String content = new String(baos.toByteArray());
        return content;
    }
}

[3]开始对主代码进行编写
package com.example.a15411.tianqi;

import android.net.Uri;
import android.os.Handler;
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.EditText;
import android.widget.MediaController;
import android.widget.TextView;
import android.widget.VideoView;

import org.json.JSONObject;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class MainActivity extends AppCompatActivity {

    private TextView hj;
    private TextView jy;
    private VideoView videoView;
    private MediaController mediaController;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        hj = (TextView)findViewById(R.id.hj);
        jy = (TextView)findViewById(R.id.jy);
        videoView = (VideoView)findViewById(R.id.videoView);
        tq();
    }

    public void tq(){
        new Thread(){public void run() {
            try {
                //(1)获取天气api
                URL url = new URL("http://t.weather.sojson.com/api/weather/city/101030100");
                //(2)发送GET请求
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                //(3)设置请求方式
                conn.setRequestMethod("GET");
                //(4)设置超时时间
                conn.setConnectTimeout(5000);
                //(5)获取服务器状态码
                int code = conn.getResponseCode();
                if (code==200){
                    InputStream in = conn.getInputStream();
                    String sj = IoString.readStream(in);
                    JSONObject jsonObject = new JSONObject(sj);
                    String data = jsonObject.getString("data");
                    JSONObject gj = new JSONObject(data);
                    String shidu = gj.getString("shidu");
                    String pm25 = gj.getString("pm25");
                    String quality = gj.getString("quality");
                    String wendu = gj.getString("wendu");
                    String ganmao = gj.getString("ganmao");
                    String zh = "湿度:"+shidu+",pm2.5:"+pm25+",天气质量:"+quality+",温度:"+wendu;
                    uigx(zh,ganmao,pm25);
                }

            } catch (Exception e) {
                e.printStackTrace();
            }

        }}.start();
    }

    public void uigx(final String tq,final String jy1,final String pm25){
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                //设置环境和建议
                hj.setText(tq);
                jy.setText(jy1);
                //强制性转换int
                int pm250 = Integer.parseInt(pm25);
                //判断pm2.5的数据是否大于60
                if (pm250>60){
                    init();
                }
            }
        });

    }

    //播放视频
    private void init() {
        mediaController = new MediaController(this); //默认的MediaController有后退(rewind)、暂停(pause)、播放(play)和快进(fast-forward)按钮,还有一个清除和进度条组合控件,可以用来定位到视频中的任何一个位置。
        String uri = "android.resource://" + getPackageName() + "/" + R.raw.pm; //设置播放路径
        videoView.setVideoURI(Uri.parse(uri));                                  //绑定路径
        videoView.setMediaController(mediaController);                          //绑定样式
        mediaController.setMediaPlayer(videoView);                              //绑定控件
        videoView.requestFocus();                                               //获取视频焦点
        videoView.start();//开始播放
    }

}

[4]效果图
S81218-134314.jpg

文章如无特别注明均为原创! 作者: 奇乐云, 转载或复制请以 超链接形式 并注明出处 奇乐云's blog - 奇乐云的个人博客
原文地址《 Android 编写一个环节检测的小案例》发布于2018-12-18

分享到:
打赏

评论

游客

切换注册

登录

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册