交易平台 app
最近的国创项目需要做一个交易平台app ,在这里把遇到的东西记录下来。
首先找到了几个资料,如下:
1 Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架
https://blog.csdn.net/teamomylife/article/details/55251895
2 给 Android 开发者的 RxJava 详解
http://gank.io/post/560e15be2dca930e00da1083
3 你真的会用Retrofit2吗?Retrofit2完全教程
https://www.jianshu.com/p/308f3c54abdd
4 MVP开发模式的交易市场APP
https://github.com/flyleft/xmarket/blob/master/README.md
5 Retrofit使用指南
https://www.jianshu.com/p/91ac13ed076d
首先按照文1的方法,建立了测试项目,在RetrofitService的建立过程中,发现有些类没有impor,后来发现:
当在build.gradle中引入依赖并sync后,AS会自动识别出代码中未声明的类,按Alt+Enter可以直接补齐import。
retrofit2的Call, 据说跟OkHttp的用法一样,虽然我两个都不知道,但是貌似可以按照“请求”的意思理解。
public interface RetrofitService {
@GET("book/search")
Call getSearchBook(@Query("q") String name,
@Query("tag") String tag,
@Query("start")int start,
@Query("count")int count);
}
Call后面的尖括号表示Call请求的数据类型。 BOOK为Call的泛型
RetrofitHelper中使用了Retrofit+OkHttp,可以参考文5。
将文1的所有代码拷贝到AS中后,发现BOOK自动导入的内容有误,去文1的GitHub上复制了BOOK的实现才OK.
自己加上了一个登录界面,使用的是AS自带的login模板,为简单起见,将注册功能直接写成了页面跳转,最终功能有效。
图片.png
baseUrl在RetrofitHelper中。
文1的示例程序中,MVP是如下实现:Activity由P(即BookPresenter,Presenter则是P包含的通用功能,类BookPresenter是对这些功能的具体实现)控制,
修改4中的程序:
xmarket后端程序中 接口的格式均在controller中。前端接口则在network中的Req文件中,而Req的调用则在各个modelImpl中。 modelImpl的调用则在PresenterImpl中。
这是因为postman显示格式不对
但是调试时发现后端刚收到前端的message时就是NULL,怀疑是类之间无法直接赋值。 只传递基本类型可以传递, 考虑将各个参数分开传递,并在后端存入数据库前,为其分配id。或者参考商品发布时的写法
貌似trade的id一直是null 没有id 一直到后端的tradebean,也没有id,这是因为mongodb的id是在插入之后自动分配的。 所以可以认为message在使用之前不需要考虑id。 打算第二天直接拆分参数!
拆分参数后,交易功能可用。考虑添加计步功能和转账功能:
页面跳转的写法:从MainActivity跳至Main2Activity:
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//在按钮响应函数中添加如下两句话就ok了
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
startActivity(intent);
}
});
在github上找到一个计步的项目:
https://github.com/linglongxin24/DylanStepCount
最终成功移植到本项目
为了实现运动币的刷新查询,模仿xmarket项目,使用SwipeRefreshLayout完成下拉刷新。相关资料如下,该资料还考虑了刷新资源的互斥操作,即只能当上次刷新完成后才能进行下次刷新。
Android开发之SwipeRefreshLayout实现下拉刷新
https://www.jianshu.com/p/97ab87cfce47
运动币的查询则参考用户交易数据的查询。 UserTradePresenterImpl
context理解:https://www.jianshu.com/p/94e0f9ab3f1d
https://blog.csdn.net/guolin_blog/article/details/47028975
安卓相对布局属性:
https://www.cnblogs.com/devinzhang/archive/2012/09/30/2709017.html
控件的出现和消失:
XML 里面:
android:visibility="visible" (其他参数为invisible 、gone)
代码里面:
obj.setVisibility(View.VISIBLE);
遇到需要将TextView中的文字转换为数字的场景,需要使用如下语句:
data=Integer.parseInt(myEditText.getText().toString());
int转换为string:
Integer.toString(step_toCoin)
xmarket项目中,主页上的4个界面分别在各个fragment中。
由于前后端Team的类型不一样,因此考虑在后端进行流操作,返回前端可识别的类型。流操作资料:https://blog.csdn.net/u010425776/article/details/52344425
采用map方法,map函数需要Lambda表达式,相关资料:https://blog.csdn.net/sanchan/article/details/70753645
查看本校商品时,后端返回给前端的URL为如下格式:
图片.png
而主页的分类中的url为:
图片.png
而两者在请求图片时调用同一个fresco函数
因此将后端中储存的url加上 /api/v1/file/img ,并将图片库复制到pic_home
最终采用前端直接在公网上下载分类图片