入门级带你实现一个安卓智能家居APP(1)java版本

<?xml version="1.0" encoding="utf-8"?>

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

以上是比较重要的UI控件,大家了解一下,其他的一些属性我就不多说了,你们可以自己尝试修改一下参数,就会发现具体的对应的作用是什么了。

我们的ui已经做好了,现在就去写主活动类的逻辑代码!!!

在这里插入图片描述

我主要说说主要逻辑吧。

首先,当然是要把我们前面编写的界面都映射到我们的主活动,setContentView(R.layout.activity_main);//该activity映射的xml界面是activity_main.xml,就是这一句,然后,开启严苛模式,我们使用StrictMode,系统检测出主线程违例的情况并做出相应的反应,最终帮助开发者优化和改善代码逻辑。

接下来就是,初始化view组件 ` initView();//初始化显示的功能控件

最后对某些组件设置监听事件,以及编写对应的函数

重点来了


我们想要APP和单片机进行tcp通信,要怎么实现呢?

建立socket连接实现tcp/ip协议----这个就是我们的实现方式。

那应该怎么做

1.创建Socket(安卓作为客户端,所以是client,单片机作为server端)。

2.打开连接到Socket的输入/输出流。

3.按照协议对Socket进行读/写操作。

4.关闭输入输出流、关闭Socket。

也许说了你们可能还是不太懂,这个用代码怎么实现啊?

我先说明一下,java socket的实现和安卓平台socket的实现有一点点的区别,*在安卓里面,涉及到网络连接等耗时操作时,不能将其放在UI主线程中,需要添加子线程,在子线程进行网络连接,这就涉及到安卓线程间的通信了,用Handle来实现。这里的子线程也就是 mThreadClient。

下面直接看我的代码----MainActivity.java

package com.example.smarthome;

import androidx.annotation.RequiresApi;

import androidx.appcompat.app.AlertDialog;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;

import android.content.DialogInterface;

import android.os.Build;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.os.StrictMode;

import android.view.View;

import android.widget.Button;

import android.widget.CompoundButton;

import android.widget.EditText;

import android.widget.Switch;

import android.widget.TextView;

import android.widget.Toast;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.InetSocketAddress;

import java.net.Socket;

import java.net.SocketAddress;

/**

  • 建立socket连接实现tcp/ip协议的方式:

*1.创建Socket(安卓作为客户端,所以是client,单片机作为server端)

*2.打开连接到Socket的输入/输出流

*3.按照协议对Socket进行读/写操作

*4.关闭输入输出流、关闭Socket

*/

public class MainActivity extends AppCompatActivity {

private Button startButton;//连接按钮

private EditText IPText;//ip地址输入

private boolean isConnecting=false;//判断是否连接

private Thread mThreadClient=null;//子线程

private Socket mSocketClient=null;//socket实现tcp、ip协议,实现tcp server和tcp client的连接

private static PrintWriter mPrintWriterClient=null;//PrintWriter是java中很常见的一个类,该类可用来创建一个文件并向文本文件写入数据

private String res=“”;//接收的数据

private TextView warning_show, temp, mq;//警告语 温湿度 气体浓度

private String []send_order={“1\n”,“2\n”,“3\n”,“4\n”};//发送的指令 1开启通风 2 关闭通风 3开启抽湿 4关闭抽湿

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);//该activity映射的xml界面是activity_main.xml

strictMode();//严苛模式

initView();//初始化显示的功能组件

}

/**

  • 严苛模式

  • StrictMode类是Android 2.3 (API 9)引入的一个工具类,可以用来帮助开发者发现代码中的一些不规范的问题,

  • 以达到提升应用响应能力的目的。举个例子来说,如果开发者在UI线程中进行了网络操作或者文件系统的操作,

  • 而这些缓慢的操作会严重影响应用的响应能力,甚至出现ANR对话框。为了在开发中发现这些容易忽略的问题,

  • 我们使用StrictMode,系统检测出主线程违例的情况并做出相应的反应,最终帮助开发者优化和改善代码逻辑。

*/

private void strictMode(){

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()

.detectDiskReads()

.detectDiskWrites()

.detectNetwork()

.penaltyLog()

.build()

);

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()

.detectLeakedSqlLiteObjects()

.penaltyLog()

.penaltyDeath()

.build());

}

/**

  • layout组件初始化

*/

private void initView(){

warning_show = findViewById(R.id.tv1);//警告语显示

temp = findViewById(R.id.temp_text);//温湿度显示

mq = findViewById(R.id.mq_text);//气体浓度显示

IPText= findViewById(R.id.IPText);//ip地址和端口号

IPText.setText(“192.168.1.127:8080”);//把ip地址和端口号设一个默认值,这个要改成你自己设置的

startButton= findViewById(R.id.StartConnect);//连接按钮

//连接事件 其实就是建立socket连接

startButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

if(isConnecting)

{

isConnecting=false;

if(mSocketClient!=null)

{

try{

mSocketClient.close();

mSocketClient = null;

if (mPrintWriterClient!=null){

mPrintWriterClient.close();

mPrintWriterClient = null;

}

mThreadClient.interrupt();

startButton.setText(“开始连接”);

IPText.setEnabled(true);//可以输入ip和端口号

warning_show.setText(“断开连接\n”);

} catch (IOException e) {

e.printStackTrace();

}

}

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 首先,恭喜你决定学习 Java 编程!在开始学习之前,我建议你先了解一些基础知识,包括计算机基础知识、编程基础知识以及 Java 的基础概念。 在学习过程中,你可以按照以下步骤来学习 Java 编程: 1. 了解 Java 的基础概念,包括 Java 的历史、安装和运行环境、Java 的基本语法和数据类型等。 2. 学习 Java 编程的基本操作,包括如何编写、编译和运行 Java 程序、如何使用变量、常量和运算符、如何使用循环和分支结构等。 3. 学习 Java 面向对象编程的基本概念和技术,包括类、对象、封装、继承、多态等。 4. 学习 Java 的常用类库和框架,包括 Java 核心类库、Java 文件输入输出、Java 网络编程、Java 数据库编程、Java GUI 编程等。 5. 学习 Java 应用程序的开发、测试和部署流程,包括如何使用版本控制工具、如何使用调试工具、如何使用测试工具、如何打包和发布 Java 应用程序等。 学习 Java 编程时,可以通过阅读 ### 回答2: 作为入门级程序员,学习Java一个不错的选择。以下是一个可行的Java学习开发路线: 1. 学习基本编程概念:首先,你需要掌握编程的基本概念,如变量、数据类型、条件语句和循环结构等。了解这些概念可以帮助你构建基本的程序逻辑。 2. 学习Java语言基础:接下来,你需要学习Java语言的基础知识,包括语法、关键字、运算符和面向对象编程等。你可以通过参加在线课程、阅读相关书籍或参考Java官方文档来学习。 3. 学习Java核心类库:Java提供了丰富的核心类库,包括输入输出、集合框架、多线程和异常处理等。理解这些类库的使用方法对于开发Java应用程序非常重要。 4. 学习数据库开发:学习使用Java与数据库进行交互,可以使用JDBC(Java Database Connectivity)技术实现。了解如何连接数据库、执行SQL语句和处理查询结果等内容。 5. 学习Web开发:掌握JavaWeb开发是非常有用的。学习使用Servlet和JSP进行动态Web页面开发,了解MVC(模型-视图-控制器)架构和常用的Web开发框架,如Spring和Hibernate。 6. 学习开发工具:选择一个适合的集成开发环境(IDE),如Eclipse或IntelliJ IDEA,以提高开发效率。学习使用版本控制工具,如Git,可以帮助你管理代码和与团队进行协作。 7. 实战项目:尝试通过参与实际项目来应用你所学到的知识。可以参与开源项目或者自己创建一个小项目,以锻炼自己的编码能力和解决问题的能力。 总结来说,入门级程序员要学习Java,你需要掌握基本的编程概念和Java语言基础,了解核心类库和数据库交互,掌握Web开发以及使用开发工具和版本控制工具。通过不断实践和参与项目,你可以提升自己的编程能力和经验。 ### 回答3: 作为一个入门级程序员,建议你按照以下路线学习和开发Java技术。 1. 学习Java基础知识:首先学习Java的语法、控制结构、数据类型、面向对象编程等基础知识。可以通过阅读Java教程、参加在线课程或找一本入门级Java教材来学习。 2. 编写简单的命令行程序:使用学到的知识,编写一些简单的命令行程序,如计算器、学生成绩管理系统等。这些练习可以帮助你巩固所学知识,熟悉Java的编程环境。 3. 学习Java核心库:学习并了解Java标准库中的常用类和方法,如字符串处理、文件操作、集合框架等。这些库将会在日后的开发中经常使用到。 4. 学习面向对象设计原则:理解面向对象编程的基本原则,如封装、继承、多态等,学习如何设计和组织Java程序的类结构。 5. 学习常用开发工具和集成开发环境(IDE):了解常用的开发工具,如Eclipse、IntelliJ IDEA等。掌握基本的调试和测试技巧,提高开发效率。 6. 学习常用的Web开发技术:学习HTML、CSS、JavaScript等前端技术,了解Java Web开发框架,如Spring、Struts等。尝试编写简单的Web应用程序。 7. 学习数据库技术:了解关系型数据库和SQL语言,学习使用Java连接和操作数据库,如MySQL、Oracle等。 8. 持续学习和项目实践:加入一个开源项目或自己动手开发一个小项目,通过实践提升编程能力,不断学习新的技术和框架。 这是一个基本的Java学习和开发路线,通过不断练习和实践,你将逐渐提升自己的编程能力,并成为一名合格的Java程序员。最重要的是保持学习的热情和持续投入。祝你学习顺利!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值