<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[晴天的博客]]></title><description><![CDATA[记录自己的学习进程]]></description><link>https://blog.csdn.net/suncold123</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; suncold123]]></copyright><item><title><![CDATA[Retrofit+RxJava 解析返回为null 的情况 Null is not a valid element]]></title><link>https://blog.csdn.net/suncold123/article/details/103978626</link><guid>https://blog.csdn.net/suncold123/article/details/103978626</guid><author>suncold123</author><pubDate>Tue, 14 Jan 2020 19:34:16 +0800</pubDate><description><![CDATA[开发的时候碰见一种情况，使用Rxjava+Retrofit请求一个接口，返回成功有两种情况，一种是正常返回实体类，http响应码为200，这个时候可以正常解析，另一种是响应码为200，响应体什么都没有，为null。这个时候再去解析的时候就会报如下的错误。Rxjava 当响应体为null 的时候会直接回调 onError 方法

java.lang.NullPointerException: Nul...]]></description><category></category></item><item><title><![CDATA[Activity 的启动流程源码分析（Android 9.0）]]></title><link>https://blog.csdn.net/suncold123/article/details/103266306</link><guid>https://blog.csdn.net/suncold123/article/details/103266306</guid><author>suncold123</author><pubDate>Tue, 26 Nov 2019 22:12:19 +0800</pubDate><description><![CDATA[本篇的源码分析基于Android 9 ，targetSdkVersion 为28

首先，分析启动流程就要先找到源头，也就是程序的入口，Android启动流程的入口就在 ActivityThread的 main方法中，简短的贴下，省略的一些代码
public static void main(String[] args) {
 
		// 开启一个主线程的Looper
    Looper.pr...]]></description><category></category></item><item><title><![CDATA[谈谈TCP协议的三次握手和四次挥手]]></title><link>https://blog.csdn.net/suncold123/article/details/83377772</link><guid>https://blog.csdn.net/suncold123/article/details/83377772</guid><author>suncold123</author><pubDate>Thu, 25 Oct 2018 12:38:09 +0800</pubDate><description><![CDATA[TCP协议

Transmission Control Protocol  传输控制协议，属于传输层通信协议，基于TCP的应用层协议有Http，smtp，ftp等

TCP的特性


面向连接： 传输数据之前会先建立连接，数据传输完毕之后释放连接


全双工通信：连接建立以后，通信双方能互相发送数据


安全可靠：通过TCP传送的数据不丢失，无差错，按序到达


TCP 使用校验和，确认和重传机制...]]></description><category></category></item><item><title><![CDATA[关于Http协议你了解多少，有多少说多少]]></title><link>https://blog.csdn.net/suncold123/article/details/83338267</link><guid>https://blog.csdn.net/suncold123/article/details/83338267</guid><author>suncold123</author><pubDate>Wed, 24 Oct 2018 08:26:45 +0800</pubDate><description><![CDATA[Http协议

超文本传输协议，构建与TCP/IP协议之上，默认端口号为80，处于网络体系结构的最顶层应用层上，Http协议采用的是请求/响应的工作方式。Http是无连接无状态的。

Q1:怎么理解Http是无连接无状态的
无连接是指限制每次连接只处理一个请求。服务器处理完客户的请求，并收到客户的应答后，即断开连接。采用这种方式可以节省传输时间。
无状态是指协议对于事务处理没有记忆能力，服务器不知...]]></description><category></category></item><item><title><![CDATA[单例模式的几种实现与在Android源码中的应用]]></title><link>https://blog.csdn.net/suncold123/article/details/79978122</link><guid>https://blog.csdn.net/suncold123/article/details/79978122</guid><author>suncold123</author><pubDate>Tue, 17 Apr 2018 17:37:09 +0800</pubDate><description><![CDATA[更多的关于设计模式与源码的内容都在我的github  
我的博客

单例模式


  核心原理： 将构造函数私有化，并且通过静态方法获取一个唯一的实例，在这个过程中必须保证线程安全、防止反序列化导致重新生成实例对象等问题。



UML 





单例模式实现的几种方式



饿汉式



/**
 * 饿汉式
 */
public class Singleton {

    private ...]]></description><category></category></item><item><title><![CDATA[Android端“被挤下线”功能的实现]]></title><link>https://blog.csdn.net/suncold123/article/details/78486674</link><guid>https://blog.csdn.net/suncold123/article/details/78486674</guid><author>suncold123</author><pubDate>Thu, 09 Nov 2017 10:35:02 +0800</pubDate><description><![CDATA[单点登录（被挤下线）所谓的被挤下线功能，即一个账号在A客户端保持登陆状态，然后又在B客户端进行了登陆操作，那么A客户端就会被挤下线。
  服务端需要返回Token,每次在app登录时为app分配一个新的token,如果在某次请求中app传递token不是最新的,则视为需要重新登录，在token失效的情况下,返回约定好的codeApp如何知道该账户已经在其他设备上登陆了呢？有三种实现方式 
api请求]]></description><category></category></item><item><title><![CDATA[常用设计模式---代理模式]]></title><link>https://blog.csdn.net/suncold123/article/details/76461713</link><guid>https://blog.csdn.net/suncold123/article/details/76461713</guid><author>suncold123</author><pubDate>Mon, 31 Jul 2017 19:00:33 +0800</pubDate><description><![CDATA[概述
  为目标对象提供一个代理对象，然后让代理对象控制对目标对象的引用。静态代理：代理类在编译时就已实现好，Java编译完成后代理类就是一个.class文件
动态代理：代理类在运行时生成，在运行时动态生成class文件并加载到jvm中
使用场景
  生活中很多场景都会用到代理模式，最直观的例子就是代购，比如你想要买一款最新的电子产品，但是国内没有，只能找代购到国外淘宝，那么“你”就是一个目标对象，]]></description><category></category></item><item><title><![CDATA[Android-上传Emoji表情到服务器的问题]]></title><link>https://blog.csdn.net/suncold123/article/details/69663258</link><guid>https://blog.csdn.net/suncold123/article/details/69663258</guid><author>suncold123</author><pubDate>Fri, 07 Apr 2017 22:53:33 +0800</pubDate><description><![CDATA[先上效果  一开始在做仿微信发朋友圈或评论的时候表情一直上传不上去，和服务端哥们探讨了一下，发现是MySQL数据库存入不了表情符号，Google了一下，有人说当MySQL的版本大于5.6的时候可以通过修改编码还是字符集什么的就可以插入了，但是对我们还是不起作用。所以考虑了一段时间决定另辟蹊径，其实特别简单，只要对上传的内容进行Base64编码就好了，然后请求下来的时候再解码，这样问题就迎刃而解了。上]]></description><category></category></item><item><title><![CDATA[解决ListView的getView()方法中View设置监听position错乱的问题]]></title><link>https://blog.csdn.net/suncold123/article/details/69663226</link><guid>https://blog.csdn.net/suncold123/article/details/69663226</guid><author>suncold123</author><pubDate>Fri, 07 Apr 2017 22:49:16 +0800</pubDate><description><![CDATA[最近在项目中遇到了类似微信朋友圈的功能，可以点赞，评论和分享。类似这样的  这是ListView的一个item，点击右下角的view弹出一个popupWindow,然后popupWindow上面还有三个按钮可点击。不管是点赞还是评论，必须的获得当前条目的位置，然后根据这个位置再去获取一系列的参数信息。但是问题来了。当我为这个item点赞或评论的时候，本item没有反应，而其他的item得到了赞或评论]]></description><category></category></item><item><title><![CDATA[Android-构建全局的异常捕捉类]]></title><link>https://blog.csdn.net/suncold123/article/details/69663180</link><guid>https://blog.csdn.net/suncold123/article/details/69663180</guid><author>suncold123</author><pubDate>Fri, 07 Apr 2017 22:41:20 +0800</pubDate><description><![CDATA[整体思路构建Android应用全局的异常信息捕捉类，当App Crash的时候，能够获取崩溃信息，包括ExceptionMessage,手机信息，版本信息等。然后写入文件存到手机sd卡中。当应用下次开启的时候读取文件上传服务器，为后期的热修复做准备。首先新建一个ExceptionCrashHandler类实现Thread.UncaughtExceptionHandler接口，并重写uncaughtE]]></description><category></category></item><item><title><![CDATA[Handler 机制 源码分析]]></title><link>https://blog.csdn.net/suncold123/article/details/52951265</link><guid>https://blog.csdn.net/suncold123/article/details/52951265</guid><author>suncold123</author><pubDate>Thu, 27 Oct 2016 23:21:41 +0800</pubDate><description><![CDATA[看之前先问自己下面几个问题：
Message 是怎么获取到消息对象的
消息是怎么加入到消息队列中的，又是怎么被取出来的
到底是怎么实现子线程和主线程的通信的
Handler sendMessage 是把消息发送到哪里了
Handler 处理消息的方法有几种
消息传递机制的核心类:
  Handler
  
  Message
  
  MessageQueue
  
  Looper  下面是自己看]]></description><category></category></item><item><title><![CDATA[Android   MVP 模式初探]]></title><link>https://blog.csdn.net/suncold123/article/details/52895131</link><guid>https://blog.csdn.net/suncold123/article/details/52895131</guid><author>suncold123</author><pubDate>Sat, 22 Oct 2016 21:40:09 +0800</pubDate><description><![CDATA[MVP 模式]]></description><category></category></item><item><title><![CDATA[ListView的头部视差效果的实现]]></title><link>https://blog.csdn.net/suncold123/article/details/52743172</link><guid>https://blog.csdn.net/suncold123/article/details/52743172</guid><author>suncold123</author><pubDate>Thu, 06 Oct 2016 12:40:04 +0800</pubDate><description><![CDATA[ListView的头部视差效果的实现]]></description><category></category></item><item><title><![CDATA[Android.线程池的原理和线程池管理类的使用]]></title><link>https://blog.csdn.net/suncold123/article/details/52331693</link><guid>https://blog.csdn.net/suncold123/article/details/52331693</guid><author>suncold123</author><pubDate>Fri, 26 Aug 2016 21:08:17 +0800</pubDate><description><![CDATA[##线程池的原理
  线程池使用来管理线程的，之所以称为池，是因为其可以管理多条线程，所以需要用一个集合来管理线程，然后线程池是有大小的，当一个线程池管理的线程数目为计算机的cup数*2+1个的时候，效率为最高。当使用线程池来执行异步任务的时候，线程池会先将这个任务添加到集合中，然后为其创建一个线程，线程方法中有一个while true一直在循环，当集合的size大于0的时候，也就是集合中有异步任务]]></description><category></category></item><item><title><![CDATA[ButterKnife Android studio初试：配置环境，解决空指针问题]]></title><link>https://blog.csdn.net/suncold123/article/details/52293261</link><guid>https://blog.csdn.net/suncold123/article/details/52293261</guid><author>suncold123</author><pubDate>Tue, 23 Aug 2016 18:08:16 +0800</pubDate><description><![CDATA[早就听说ButterKnife非常的方便，今天有机会自己实践一下，看着别人的教程在studio上搞了一遍，可是到运行的时候总是出现空指针异常，经过搜索，最后找到了问题所在。就是环境没有配好，可能是因为随着版本的更新每次配置也都不一样了。我所用的ButterKnife的版本是com.jakewharton:butterknife-compiler:8.2.1。我会把具体的代码贴到文章的最后。]]></description><category></category></item><item><title><![CDATA[Android studio 1.2开发环境下配置AIDL，生成相应的.java文件]]></title><link>https://blog.csdn.net/suncold123/article/details/48785709</link><guid>https://blog.csdn.net/suncold123/article/details/48785709</guid><author>suncold123</author><pubDate>Mon, 28 Sep 2015 15:50:38 +0800</pubDate><description><![CDATA[最近学习Android要从eclipse的开发环境转到Android studio下，各种不适应，不过Android studio酷炫的界面一直吸引着我，另外据说这是早晚的事，所以早点适应就好，自己就硬着头皮摸索着使用Android studio。今天学习了Android访问远程服务中的方法。所谓访问远程服务中的方法，就是进程之间的通信，一个应用要访问另外一个应用中的一个方法。明显为了保障一些隐私这]]></description><category></category></item><item><title><![CDATA[win10配置java环境变量，解决javac不是内部或外部命令等问题]]></title><link>https://blog.csdn.net/suncold123/article/details/48392135</link><guid>https://blog.csdn.net/suncold123/article/details/48392135</guid><author>suncold123</author><pubDate>Sat, 12 Sep 2015 10:39:22 +0800</pubDate><description><![CDATA[昨天重装了win10系统，发现以前配好的java环境变量和tomcat环境变量全都清空了，在重新配置的时候总是出现问题，即在cmd命令窗口下，输入java，显示正常，输入java -version 也是显示正常，唯独输入javac，显示“javac不是内部或外部命令，布拉布拉一些的问题”，然后我就开始各种百度各种谷歌，终于在大半夜把这个问题搞定了。。。

来看看我的新博客

下面来说说这个问题的解...]]></description><category></category></item><item><title><![CDATA[Activity的生命周期和Activity的四种启动模式]]></title><link>https://blog.csdn.net/suncold123/article/details/48287985</link><guid>https://blog.csdn.net/suncold123/article/details/48287985</guid><author>suncold123</author><pubDate>Tue, 08 Sep 2015 10:49:57 +0800</pubDate><description><![CDATA[Activity的七种生命周期方法void onCreate();
Activity已经被创建
void onStart();
Activity已经显示在屏幕，但是还没有得到焦点(不能交互)
void onresume();
Activity得到焦点，可以和用户交互
void onPause();
Activity失去焦点，无法与用户交互，但是还可见
void onStop();
Activity不]]></description><category></category></item><item><title><![CDATA[Android网络编程之使用get方式向服务端提交数据和乱码问题的解决]]></title><link>https://blog.csdn.net/suncold123/article/details/48104465</link><guid>https://blog.csdn.net/suncold123/article/details/48104465</guid><author>suncold123</author><pubDate>Sun, 30 Aug 2015 14:04:23 +0800</pubDate><description><![CDATA[学习javaweb的时候都知道向服务端提交数据有两种方式，get和post。今天学习了在Android客户端使用get方式提交登录数据的小案例。
步骤：先新建一个web项目，搭建一个简单的登录表单界面设置好用户名和密码，点击登录的时候会显示登录成功或者失败，这里就不在贴Servlet和jsp的代码了。在这里我设置用户名为”小强”,密码为123.
设置安卓的布局，两个EditView和一个Button]]></description><category></category></item></channel></rss>