- 博客(46)
- 资源 (17)
- 收藏
- 关注
翻译 Retrofit 基本使用教程
Retrofit 查询参数查询参数是一种很常见的客户端往服务端传递数据的方式,比如我们需要传一个idg=给服务端,那么URL可能是这样的:https://api.example.com/tasks?id=123Retrofit 定义实现查询参数:public interface TaskService { @GET("/tasks") Call<Task> getTask(@Qu
2016-02-28 12:01:58
10801
3
原创 图片加载框架Glide使用教程
Glide,和Picasso很相似,可以从各种图片来源加载和显示图片,并且很好的支持缓存。同时,它在对图片操作时,只占用很少的内存。Glide已经被谷歌官方的应用程序所使用(如2015年的 Google I / O的应用程序),同时,它和Picasso一样受到Android应用开发者的欢迎。在项目中引入GlideGradle:compile 'com.github.bumptech.glide:gl
2016-01-02 20:42:01
30105
2
原创 滑动切换Activity
百度贴吧有滑动切换Activity的功能,感觉很方便: 这种功能要自己写还是挺复杂的,幸运的是,已经有比较成熟的开源项目,项目地址:https://github.com/r0adkll/Slidr。下面将使用这个开源项目,快速实现相似的功能。一、导入Slidr到项目在dependencies中加入下面一句,就可以引入开源库到当前项目:compile 'com.r0adkll:slidablea
2015-08-03 23:12:07
9302
3
翻译 Android异步HTTP请求框架Volley的使用
原文地址:http://arnab.ch/blog/2013/08/asynchronous-http-requests-in-android-using-volley/#Volley是Android 开发者的一把“瑞士军刀”,它提供了一些好的工具让在Android 开发中使用网络请求更快,更便捷。Volley的优点在于它封装了HTTP请求的底层实现,让开发者更加专注地写出优雅干净的REST
2015-07-28 19:50:34
3845
原创 受够了天天手改 settings.json,我用 GLM 5.3 十分钟撸了个切换器,已经开源了
一个桌面小工具,专门用来给 Claude Code 和 Codex CLI 一键切换模型/服务商。Tauri 2 + React 19 写的,macOS / Windows / Linux 都有安装包,MIT 协议,源码在这里:感兴趣的可以先去看代码,回头再听我唠开发过程。
2026-08-15 16:46:08
243
原创 弱网、异常、接口对比:抓包工具还能帮测试做什么
回到这个系列开头说的:我做 AIProxy,是因为被现有的抓包工具劝退了。Charles 收费、跨平台体验割裂;Fiddler 偏 Windows;mitmproxy 是命令行;Proxyman 又贵又偏 Mac。我想要一个免费、开源、三平台一致、界面现代、能抓手机、还能写脚本玩花的工具——找了一圈没有,就自己写。写完发现,可能不止我一个人有这个需求。于是就开源了。
2026-08-09 20:45:25
324
原创 前端不用再等后端:抓包之后,我在代理层直接改接口
上周联调一个会员页,后端字段还没准备好,前端页面却要先走验收。以前碰到这种事,无非三条路:干等接口、本地起一套 mock 服务、或者临时拉后端帮忙塞个数据。后来我发现,这类事放在代理层做最顺手——请求照常发出去,响应回来的时候,只动需要改的那个字段。AIProxy 的改包能力,大致是从「不写代码」到「写两行 JS」递进:八成的需求图形规则点点就行,剩下两成带条件的,交给脚本。下面把我自己最常用的几个场景过一遍。操作都在 Rules 页面。
2026-08-09 20:44:34
276
原创 我用 Rust 写了一个开源的 Charles 类抓包工具,Web 和手机都能抓
—抓 HTTP / HTTPS / WebSocket,改包、Mock、弱网,这些才是主力。“AI” 只用在其中一个辅助功能上(给两个会话的差异生成一段总结),不是什么 AI 代理。,MIT 协议,免费开源,觉得有用欢迎 Star。三栏主界面:左侧按域名分组的会话树,右侧请求/响应检查器,HTTPS 明文、Headers、JSON Body 在一屏里看完。
2026-08-09 20:37:00
346
原创 获取最新最完整的省市县数据
下载省市县JSON数据Github源码获取数据的来源什么地方可以获取最权威的省市县数据?当然是官网民政部门门户网站在网站的最下面,你可以看到最新的行政区划分代码打开连接,数据是这样展示的:显然,这样的数据我们是无法使用的先复制网页内容到txt文件,然后删除无用的文字,最后得到这样的: 代码生成JSON数据我们最终需要的是一份JSON数据,这样才...
2018-05-10 11:41:52
23761
8
原创 Gradle 插件更新到3.0.1之后,release包安装不上
原来以为是instant run打开了,但是关了之后仍然不行,直接Android Studio 上点击安装是可以的最后发现是buildToolsVersion版本原因原来是26.0.2改成 27.0.2就行了。。坑
2018-01-09 11:08:28
2410
原创 Retrofit源码解析
Retrofit源码结构Retrofit: 通过注解,把一个Java接口转化成一个http 请求,底层网络请求基于okhttp从Retrofit源码结构可以看出,Retrofit 源码分成两部分 一部分是包retrofit2.http里面的,在Java接口方法中使用,用来控制http行为的注解。一部分是retrofit2里面的,负责把REST API转化成Java接口。Retrofit和okht
2016-07-16 08:25:07
1373
原创 Android键盘弹出的研究
键盘弹出基本上开发中都会用到,之前用的比较简单,最多也就是Activity windowSoftInputMode标签中设置属性,没有深入研究。直到最近在解决键盘弹出导致界面闪烁的问题以及在做直播功能需要在键盘弹出时控制某些View的测量遇到一些问题,决定总结一下键盘弹出相关的知识点。键盘行为的控制一般情况,键盘的显示和隐藏都交由系统控制,比如,当EditText获取焦点时,键盘会弹出来,当用户按返
2016-07-09 10:07:22
5006
原创 Fragment重叠问题引发的思考
参考: http://stackoverflow.com/questions/16189088/overlapping-hidden-fragments-after-application-gets-killed-and-restored http://stackoverflow.com/questions/18274732/android-fragments-overlapping-
2016-06-18 20:35:45
7259
1
翻译 Android MVP 使用教程
写一个Hello World程序总是很简单的,它的代码总是很简单、整齐的,SDK完全可以满足我们的需求。但是,如果你在开发过复杂的Android app,你应该清楚,生产环境的代码往往不是这样。你需要花费好几个小时去弄清楚在没有WiFi的情况下,为什么当手机屏幕旋转时,你的购物车不会更新。 你需要不断的在已经很复杂的Activity 的onCreate 方法里面去添加if 语句去解决app在某个设
2016-03-15 21:29:06
2546
翻译 Android MVP 介绍
原文地址: http://antonioleiva.com/mvp-android/#MVP (Model View Presenter) 模式是广为人知的MVC(Model View Controller)模式的一种衍生品,在最近一段时间,它逐渐受到Android开发者的重视,越来越多的人开始谈论它。但是,网络上却缺少可靠和严谨的文章来介绍MVP这种新的模式,这就是我为什么要用这个博客来鼓励
2016-03-12 22:17:00
1162
翻译 Retrofit简单介绍和使用
原文地址: https://futurestud.io/blog/retrofit-getting-started-and-android-client#Retrofit是什么对于Retrofit ,官方的描述是:“A type-safe REST client for Android and Java.”它可以通过注解来描述Http请求,URL参数,查询参数,同时,它还支持多个请求体和文件上
2016-02-22 22:09:53
2442
原创 代码大全第15章,使用条件语句
一、if-else语句 1、把正常情况的处理放在if后面而不要放在else后面 2、不写写空的if-else语句 3、测试else代码的正确性 4、检查if-else是不是弄反了二、if-else if语句 1、把常见的放在最前面 2、利用布尔函数调用简化复杂的检测 3、确保所有情况都已经考虑到 4、如果可以使用case语句,尽量使用case语句三、case语句 1、为case语句
2016-02-20 16:08:43
753
原创 Effective Java 78 条规则
创建和销毁对象一、考虑用静态工厂方法代替构造器 二、遇到多个构造参数时要考虑用构建器(Builder模式) 三、用私有构造器或者枚举类型强化Singleton属性 四、通过私有构造器强化不可实例化的能力 五、避免创建不必要的对象 六、消除过期的对象引用 七、避免使用终结方法对象通用方法八、覆盖equals时请遵守通用约定 九、覆盖equals时总要覆盖hashCode 十、始终要覆盖
2016-02-18 22:10:39
1032
原创 图片加载框架Fresco使用总结
一、SimpleDraweeView 属性介绍 <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/my_image_view" android:layout_width="match_parent" android:layout_height="300dp" fres
2015-12-27 11:17:05
10710
原创 Dialog使用总结
1、构造函数Dialog默认使用所在Activity主题: public Dialog(Context context) { this(context, 0, true); }使用指定的主题: public Dialog(Context context, int theme) { this(context, theme, true); }2、常用用法m
2015-11-30 22:15:52
1135
原创 PopupWindow使用总结
一、构造函数1、包含Context的构造函数 public PopupWindow (Context context ) { this( context, null); } PopupWindow的一些属性会和应用设置的主题相关,自带背景(如果不设置背景,可能不能全屏)2、不包含Context的构造函数 public PopupWindow () {
2015-11-29 10:57:40
1415
原创 Ubuntu服务器相关命令
1、修改MySQL密码mysql -u root -p 先用旧密码登录 mysql> use mysql; mysql> update user set Password = PASSWORD(‘新密码’) where User =’root’;
2015-11-14 10:08:38
735
原创 Android App 开源项目使用统计
Android的开源项目越来越来多,很多时候,我们选择开源项目时不知道选择哪个好,因此,我决定反编译当前一些用户量大,比较知名的App,看看他们是用了什么开源项目,一方面,在我们选择开源项目时可以参考,另一方面,也可以发现一些比较流行的开源项目,可以学习学习,对找工作用帮助。美团 :JakeWharton/ViewPagerIndicator JakeWharton/NineOldAndroid
2015-09-04 13:44:40
1834
原创 Android动画学习--帧动画,补间动画,属性动画的基本用法
一、Drawable Animation(帧动画)帧动画主要是通过加载一系列的Drawable的资源来实现动画效果,每张图片设置一段展示的时间,相当于一帧,很多张图片连接起来,就是一段帧动画。一般帧动画通过在Drawable文件夹新建一个XML来实现,XML文件包含一个作为根节点,下面包含一系列子元素的节点,每个包含图片,和显示时间:<?xml version="1.0" encoding="utf
2015-08-19 22:59:22
1346
原创 深入学习Android异步任务-AsyncTask
一、AsyncTask的介绍与使用AsyncTask可以让程序进行异步工作,它在一个线程中执行某些操作,之后将结果返回给UI线程。使用AsyncTask类时,需要继承AsyncTask类并实现doInBackground()回调方法。要更新UI界面,需要实现onPostExecute(),并从doInBackground()方法中获得结果,最后,可以在UI线程中调用execute()方法来执行操作,
2015-08-19 22:40:18
734
原创 Android 的消息机制
一、Handler机制的总结1、HandlerHandler对象是Message的接收者和处理者。用户使用Handler对象把Message添加到消息队列中;同时通过Handler的回调方法handleMessage()来对消息队列中的Message进行处理。Handler对象在构造时和某个Looper对象关联在一起(Handler构造函数中可以传入Looper实例,如果不传,Handler关联的L
2015-08-09 12:32:36
1034
原创 Android 手势识别--GestureDetector
如果要对一个View进行手势监听,比如,单击,双击,滑动等,可以通过自定义View,重写View 的onTouchEvent方法,定制自己想要监听的手势。不过,如果我们只是对一个普通的View监听一些常用的手势,大可不必选择自定义View,有更简单的方法可以实现。Android为我们提供了GestureDetector类,封装了一些常用的手势。GestureDetector的简单用法GestureD
2015-08-08 15:31:39
897
原创 MotionEvent 源码学习
在View被触摸时,会收到Framework传来的MotionEvent实例,封装了输入事件种类,坐标等信息,因此,要熟悉View事件的处理,首先要熟悉MotionEvent的一些常用方法和属性。输入事件的种类输入事件的种类比较多,一般常用的也就下面几种: ACTION_DOWN:按压动作的开始,是整个动作的开始 ACTION_UP:按压动作的结束,是整个动作的结束 ACTION_MOVE:手
2015-08-01 13:12:36
1032
原创 源码分析Activity启动的流程
一般我们知道,Activity启动会依次调用Activity的onCreate,onStart,onResume方法,但是,我们心里肯定会有疑问,为什么会调用这些方法?,Activity实例是怎样获取的?要解开这些疑问,就必须分析Activity的源码。先来个总的流程图,然后再分析:一般,我们跳转Activity都会像下面这么写: Intent intent=new Intent();
2015-07-22 23:22:25
1011
原创 解析View中的MeasureSpec
MeasureSpec是View中的一个内部类,封装了父View传给子View的布局需求: public static class MeasureSpec { private static final int MODE_SHIFT = 30; private static final int MODE_MASK = 0x3 << MODE_SHIFT;
2015-07-19 23:29:55
1281
原创 Android View深入学习(三),View的绘制(Draw)过程
View绘制最开始是从最顶层DecorView开始的,在ViewRootImpl中的performTraversals方法中,调用了 performDraw,开始对DecorView进行绘制: private void performDraw() { if (mAttachInfo.mDisplayState == Display.STATE_OFF && !mReportNextD
2015-07-19 10:19:33
1845
原创 Android View深入学习(二),View的布局(Layout)过程
View布局最开始是从DecorView开始的,在ViewRootImpl中的performTraversals方法中,调用了 performLayout(lp, desiredWindowWidth, desiredWindowHeight),开始对DecorView测量: private void performLayout(WindowManager.LayoutParams lp, int
2015-07-18 18:31:42
1208
原创 Android View深入学习(一),View的测量(Measure)过程
Android应用上面的View显示出来都必须经过测量,布局,和绘制这三个过程。我们知道PhoneWindow中的DecorView是界面最顶层的View,那么,最先绘制的View肯定是DecorView。在ViewRootImpl中的performTraversals方法中中,依次对DecorView进行测量,布局,和绘制: private void performTraversals() {
2015-07-18 11:55:28
1831
原创 Android 事件分发实践(一),解决ScrollView嵌套ListView滑动的问题
需要在ScrollView里面嵌套一个ListView,让ScrollView和它里面的ListView都能滑动(ListView宽度没有占满ScrollView),先贴上布局代码:<com.example.xujiang.viewlearn.touchConfict.MyScrollView xmlns:android="http://schemas.android.com/apk/res/and
2015-07-13 20:56:23
3830
1
原创 深入理解Android事件分发机制
一、Android事件的入口(该文所引用的源码代码出自Android 5.1版本) 一直想搞清楚Android 事件分发的各个函数调用的关系,前几天突然想起Debug时会显示出线程函数调用的关系,于是,写了一个很简单的程序,在界面上显示一个Button,并且为这个Button注册onTouch事件,在里面打个断点:button.setOnTouchListener(new View.OnTouch
2015-07-12 22:17:46
2287
原创 解决Genymotion运行Android 5.0一直卡在开机界面
Genymotion运行Android 5.0模拟器一直卡在开机界面,如下图:解决方法:进BIOS,设置intel Virtualization Technology 为enable就可以了
2015-05-30 19:37:00
6591
1
原创 Android编译环境,Build系统的学习总结
Android Build系统的介绍Android build系统主要用于对手机系统二进制文件的编译,APK应用的编译,同时生成手机系统的镜像以及各种配置文件,同时,还要维护各个模块间的依赖关系,确保某个模块的修改能引起依赖的文件重新编译.Android的Build系统可以分成三个大的模块: 1.位于build/core目录下的文件,是Android Build系统的框架和
2015-05-24 10:35:05
798
原创 Eclipse使用技巧总结
一、Eclipse代码提示设置1.在Preferences中,下图标记地方输入“abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.”。2.设置XML文件代码提示,下图标记地方输入“二、已经Root的手机,Eclipse访问data目录,显示没有权限按照下图操作,一路往下更改权限
2015-05-23 11:15:09
576
原创 Java线程总结
一、线程的创建1、继承Thread类,重写run方法优点:简单。缺点、;已经继承Thread类,不能再继承其他的类,不能共享实例变量。2、实现Runnable接口,重写run方法。这种情况,多个线程可以共享Runnable实例变量。3、使用Callable和Future创建线程,实现Callable接口。第一步:重写call方法,作为线程执行体,有返回值。第二步:创
2015-05-17 20:05:12
953
原创 FaceBook开源图片加载框架Fresco简单介绍
一、Fresco编译和引入工程 Fresco是Facebook最新推出的一款用于Android应用中展示图片的强大图片库,可以从网络、本地存储和本地资源中加载图片。之前看大家在QQ群和各个社区都在讨论Fresco,都说性能非常好,心里禁不住诱惑,所以决定尝试一下。前途是光明的,道路是曲折的,Fresco的引入出现各种问题,折腾了我好些时间。 Fresco在git
2015-05-16 19:34:07
6318
Android-Universal-Image-Loader Demo和jar包
2015-04-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅