实践Android客户端与服务端之间使用JSON交互数据。

实践Android客户端与服务端之间使用JSON交互数据。

具体操作请查看:【Android 开发】: Android客户端与服务端之间使用JSON交互数据。这个案例,已经教会你配置服务端和客户端两者结合,用json作为媒介,进行通信了。不过会发现一个问题:最终是得不到logcat中的结果,还有服务端的JsonAction,要实例化才可以用,否则会报空指针的异常
经过查找,首先在HttpUtils类中的catch出进行捕获异常的输出e.printStackTrace();,只能说博主太粗心了,连异常都不捕获,难为我们这些学习者,半天都不知道哪里错,因为没有错误提示。
然后,你会发现:在logcat中:会发现异常,不过,是被指定为警告类型(黄色,不是红色)TAGSystem.error,错误为android.os.NetworkOnMainThreadException。报错的位置是这个int code = connection.getResponseCode(); // 返回状态码
经过一番百度+谷歌才知道问题的所在,实在不知道博主是怎么运行起来,可能是这篇文章的久远性吧,在安卓2.3还是行的,后面的系统就不可以了。有两种解决方法:

  • 一种是线程,开一个线程去解决网络请求。对于后期的开发,这个是最好的解决方法,因为使用网络会有很多的变数,对于同类型的操作可以进行整合。(扩展到断点的下载)
  • 一种是使用StrictMode类,是谷歌从在android2.3版本以后,系统增加的类,专门用于:对网络的访问方式进行了一定的改变
    • 介绍:StrictMode通常用于捕获磁盘访问或者网络访问中与主进程之间交互产生的问题,因为在主进程中,UI操作和一些动作的执行是最经常用到的,它们之间会产生一定的冲突问题。将磁盘访问和网络访问从主线程中剥离可以使磁盘或者网络的访问更加流畅提升响应度和用户体验。
    • 关于StrictMode的详细用法,请查阅Android最佳实践之:StrictMode介绍。我的理解,StrictMode就是一种试调的模式,检查Android应用程序的性能和存在的潜在问题
    • 如何解决问题呢?只需要在Activity或者应用程序开始的application的oncreate方法中添加
        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() 
                .detectAll() 
                .penaltyLog() 
                .penaltyDialog() 打印logcat,当然也可以定位到dropbox,通过文件保存相应的log
                .build()); 
        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll() 
                .penaltyLog() 
                .build());
      
      并且在配置文件中将SDK的最低等级设为11。当然可以封装成一个方法的形式
        public static void closeStrictMode() {
        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
        .detectAll().penaltyLog().build());
        .....
        }
      
  • 知识延伸:http协议:HTTP协议详解(真的很经典)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值