实践Android客户端与服务端之间使用JSON交互数据。
具体操作请查看:【Android 开发】: Android客户端与服务端之间使用JSON交互数据。这个案例,已经教会你配置服务端和客户端两者结合,用json作为媒介,进行通信了。不过会发现一个问题:最终是得不到logcat
中的结果,还有服务端的JsonAction
,要实例化才可以用,否则会报空指针的异常。
经过查找,首先在HttpUtils
类中的catch
出进行捕获异常的输出e.printStackTrace();
,只能说博主太粗心了,连异常都不捕获,难为我们这些学习者,半天都不知道哪里错,因为没有错误提示。
然后,你会发现:在logcat
中:会发现异常,不过,是被指定为警告类型(黄色,不是红色),TAG
为System.error
,错误为android.os.NetworkOnMainThreadException
。报错的位置是这个int code = connection.getResponseCode(); // 返回状态码
经过一番百度+谷歌才知道问题的所在,实在不知道博主是怎么运行起来,可能是这篇文章的久远性吧,在安卓2.3还是行的,后面的系统就不可以了。有两种解决方法:
- 一种是线程,开一个线程去解决网络请求。对于后期的开发,这个是最好的解决方法,因为使用网络会有很多的变数,对于同类型的操作可以进行整合。(扩展到断点的下载)
- 一种是使用
StrictMode
类,是谷歌从在android2.3
版本以后,系统增加的类,专门用于:对网络的访问方式进行了一定的改变- 介绍:
StrictMode
通常用于捕获磁盘访问或者网络访问中与主进程之间交互产生的问题,因为在主进程中,UI操作和一些动作的执行是最经常用到的,它们之间会产生一定的冲突问题。将磁盘访问和网络访问从主线程中剥离可以使磁盘或者网络的访问更加流畅,提升响应度和用户体验。 - 关于
StrictMode
的详细用法,请查阅Android最佳实践之:StrictMode介绍。我的理解,StrictMode
就是一种试调的模式,检查Android应用程序的性能和存在的潜在问题。 - 如何解决问题呢?只需要在
Activity
或者应用程序开始的application的oncreate
方法中添加
并且在配置文件中将SDK的最低等级设为StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectAll() .penaltyLog() .penaltyDialog() 打印logcat,当然也可以定位到dropbox,通过文件保存相应的log .build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll() .penaltyLog() .build());
11
。当然可以封装成一个方法的形式public static void closeStrictMode() { StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectAll().penaltyLog().build()); ..... }
- 介绍:
- 知识延伸:http协议:HTTP协议详解(真的很经典)