Giter VIP home page Giter VIP logo

classifydemo's Introduction

ClassifyDemo

1.0

区分手机号得到相应手机号是否存在微信用户,用户是否状态异常,还有获取到微信id和地区,性别及昵称。

输入:手机号清单文本

输出:用户存在,用户状态异常,用户不存在,用户信息4个文本。

1.2

新增hook类。这个是利用Xposed的框架的实现的,要hoonk的是微信的方法,得到搜索时的界面信息,信息放在bundle里面,从bundle中取出我们想要的数据。对了,需求变了,现在要获取多几个数据,用户的个性签名,v1值,v2值。

然后就是将hook到的信息传输到我们的MAinActivity中,再将数据操作写入到文件中去。然后这里就是个大坑,本来以为是线程间的通信,通过同步锁来实现同步,实现数据的传输。结果发现这其实是两个进程,所以就得用进程间的通信,这个就麻烦了。

因为进程间的通信,所以同步锁就失效了,而且变量不能直接传输。所以就得用进程间的通信了,开始时考虑直接用共享文件来做,但是文件的同步很容易出问题,Hook方法所在进程创建文件,把数据储存进临时文件,同时把这个文件拿来当成是进程间的同步标识,但是Activity所在进程拿数据时,可能文件还没写入完成或者说写了一半,此时那边的拿就很有问题了。咦,突然想到,用两个文件,hook的逻辑 1、先删除标识文件 2、将数据写入储存的临时文件。 3、创建标识文件

而Activity那边的逻辑。 1、do while 判断标识文件是否存在 2、 将储存数据的临时文件的数据读取出来,写入本地。

这样应该是没有问题的。

项目中不是用文件的方式了,是用ContentProvider的方式,因为ContentProvider是一个数据暴露的接口,可以用于进程间的通信,而SharedPreference的Multi Process的模式被抛弃了,然而ContentProvider还有一个问题,它不能储存数据的,网上很多都是将数据放入数据库中,但是我不想用数据库,所以用了SharedPreference的方式储存数据。此时需要处理的就是SharedPreference的是ContentValues数据,而ContentProvider却是操作uri。所以在其查询方法中应该自定义Cursor。利用get/set Extras的方式操作bundle来实现数据的操作。这里有个需要注意的是因为操作SharedPreference需要context对象,但是获取Activity / Service / ContentProvider的context都没有用。要获取当前hook所在的进程的context。 这里获取的方式也是通过hook方法来获取的。

最后本来以为搞定了,结果在远程机器上跑的时候,出现了一大堆问题。zzz,网络跟cpu都下降了,一开始出现了找不到添加按钮,所以进不去判断是那种情形的方法,将do while 获取添加按钮的时间调整为20s。而且每次都重新获取根节点。然后将判断是哪种情形的逻辑并行处理,不用设为串行,这样就不会浪费时间了,然后在获取节点时可能会出现节点为null的情况,此时在函数中添加判断节点不为null即可。

1.3

改进几个bug

1、昵称含特殊符号时换行了

2、个性签名含特殊符号时换行了

3、有的地区没有获取到

新增几个功能

1、记录每次翻译的总个数

2、记录当前翻译的个数

3、记录翻译的开始和结束时间

4、自定义异常类,实现超时(例如网络引起)、等待辅助功能类、等待hook函数超时的异常获取。在主界面中显示异常的类型,还有停止当前程序。

1.4

1、新增将数据存储在数据库的功能(为了后面的跟服务端交互)

2、新增toast打印当前翻译进度

3、新增停止按钮

4、添加保存进度的功能,可以把前面没做完的任务继续执行下去

2.0

改革系统的设计了。

直接从后台获取待分类的手机号,首先将数据插入数据库,然后在开始分类,分类完成后再更新数据状态,最后将数据一起上传到服务器。

其中有很多细节需要处理,比如一开始就是先判断数据库有没有还没做完的任务,如若有就先翻译再上传,然后还有判断数据库有没有没上传的数据,有的话也是自动处理;上传过程是while循环的,便于异常的处理。

整个逻辑过程都需要异常处理,然后在主界面中显示,还有做到网络中断后的处理,还有模拟器被关闭的处理。

实现开机自启动,让其自己不断地做任务。

2.1

1、当app获取到异常信息时,利用sharedPrefrences来存储数据,点击app就可以在ui界面中再次从sharedPrefrences中拿出来复原

2、辅助功能类获取超时的处理,利用while循环来保证可靠性,特别的输入手机号后按两下回车的时候

3、动态获取userid,这个是用于与后台交互时需要的函数参数

4、整理整体逻辑,下次进来时会把未翻译的翻译完成后,未提交到服务器的先提交

2.2

1、保证手机号码的填入

2、缩短每次任务失败到重新启动的时间间隔

3、修改等待hook类的代码逻辑

4、新增每次获取根节点去操作前都会判断是否为空

2.3

修复程序突然停止运行以及上传到服务器失败的问题。

修改数据库定义表的字段类型

2.4

修改上传失败的时抛出异常,并在主界面显示。

将spaceid由1改为0

2.5

1、修改上传时的spaceid 的选择和更改

2、新增翻译模式,只走翻译而不是过滤。

2.6

1、设置三个全局变量用于控制模式的切换,切换spaceid,翻译/过滤模式,每次拉取的数量

2、修复抛出异常处理的bug

2.7

1、修改界面布局ui

2、更改界面更新操作,在onResume()中刷新界面数据

classifydemo's People

Contributors

carrys17 avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.