Android Studio和Java使用tcp时碰到的一些坑

项目需要,最近在写Android Studio的tcp通信,同时也是刚开始学java,记录一些遇到的坑

1.使用log输出日志,相比较java的syso多了tag和级别控制,使用更方便
2.活动创立之初要重写oncreate方法
3.一个活动对应一个布局,但是逻辑和图像分离
4.android:id类似于cocos2dx的settag和setname,定义@+id/id_name,使用@id/id_name
5.java创建一个socket的写法,其中ip为string,port为int就可以。创建的同时会发起连接

Socket cilent_socket = new Socket(ip, port);

6.System.out.println可以自动换行……
7. vim 保存提示 readonly option is set (add!to override)的时候,如果确认有root权限就使用:wq!保存
8.获取ArrayList长度使用.size而不是.lenth
9.list是线程不安全的,vector是线程安全的。
10.centos安装java环境、编译和运行java

yum install java-devel
javac
java

11.Android Studio中使用Socket就会闪退,发现socket不能在主线程里创建、连接
12.调试应用失败可以在构建里清除项目后再尝试
13.需要取得对应的权限后方可蓝牙、联网等
14.先在res创建目录,该目录应当从属于R文件,然后在目录创建布局,

setContentView(R.layout.first_layout);

15.创建一个按钮举例

<Button
 android:id ="@+id/Light1_turn_on"
 android:layout_width ="match_parent"
 android:layout_height="wrap_content"
 android:text="Button 1"
 />

16.tcp连接后,即使没有实时信息,也要发送心跳包保持连接,心跳包的机制应该是

1.客户端发按心跳周期问服务器 “嘿,我还活着吗
2.服务器收到之后,告诉客户端 “嗯,你还活着,同时我也还活着
3.当客户端 “嘿,我还活着吗” “嘿,我还活着吗” “嘿,我还活着吗”……却没有收到回复,此时判定socket连接已经断开
4.客户端主动断开连接(不管此刻的连接状态如何),然后再主动发起连接

17.out.write()是字节输出流的方法,out.print()是字符输出流的方法
18.java线程执行完run部分就会终止线程,可以由此设置退出标志,在while里终止线程
19.Android Studio使用.isConnect判断socket状态时,要先初始化。仅声明不可以,会导致socket为空,返回异常
20.可以使用如下代码段实现java的socket发送,其中发送端需要在代发送的字符串末尾加一个\n,表示一行的结束。或许有其他更好的办法,但是java的输入输出流实在太复杂了,没搞懂

OutputStream cilent_outstream = cilent_socket.getOutputStream();
PrintWriter cilent_sendbuf = new PrintWriter(cilent_outstream);
cilent_sendbuf.write("hello");
cilent_sendbuf.flush();
InputStream cilent_instream = cilent_socket.getInputStream();
BufferedReader cilent_revbuf = new BufferedReader(new InputStreamReader(cilent_instream));
 while (true)
 {
 while (!((rev_string = cilent_revbuf.readLine())==null))
 {
 SysLog("来自"+cilent_socket.getInetAddress()+"的新信息:"+rev_string);
 }
 }

21.Android Studio使用Toast消息机制

Toast.makeText(getApplicationContext(), "默认Toast样式",Toast.LENGTH_SHORT).show()

22.Android Studio 多线程使用Thost时候会闪退,跟安卓的消息机制有关系,不深究,前后加Loop即可,Looper.loop会构成死循环,后面的代码不会执行,

Looper.prepare();
Toast.makeText(getApplicationContext(), "服务器已经连接!",Toast.LENGTH_SHORT).show();
Looper.loop();

23…获取布局中的对象

Button connect_button = (Button) findViewById(R.id.Connect);

24.跳转活动

Intent intent = new Intent(SActivity.this, FirstActivity.class);
startActivity(intent);

25.设置活动为主活动

<intent-filter>
 <action android:name="android.intent.action.MAIN" />
 <category android:name="android.intent.category.LAUNCHER" />
 </intent-filter>
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值