最近的國創(chuàng)項(xiàng)目需要做一個(gè)交易平臺(tái)app ,在這里把遇到的東西記錄下來墙贱。
首先找到了幾個(gè)資料,如下:
1 Android 教你一步步搭建MVP+Retrofit+RxJava網(wǎng)絡(luò)請(qǐng)求框架
https://blog.csdn.net/teamomylife/article/details/55251895
2 給 Android 開發(fā)者的 RxJava 詳解
http://gank.io/post/560e15be2dca930e00da1083
3 你真的會(huì)用Retrofit2嗎?Retrofit2完全教程
http://www.reibang.com/p/308f3c54abdd
4 MVP開發(fā)模式的交易市場(chǎng)APP
https://github.com/flyleft/xmarket/blob/master/README.md
5 Retrofit使用指南
http://www.reibang.com/p/91ac13ed076d
首先按照文1的方法贱傀,建立了測(cè)試項(xiàng)目惨撇,在RetrofitService的建立過程中,發(fā)現(xiàn)有些類沒有impor府寒,后來發(fā)現(xiàn):
當(dāng)在build.gradle中引入依賴并sync后魁衙,AS會(huì)自動(dòng)識(shí)別出代碼中未聲明的類报腔,按Alt+Enter可以直接補(bǔ)齊import。
retrofit2的Call, 據(jù)說跟OkHttp的用法一樣剖淀,雖然我兩個(gè)都不知道纯蛾,但是貌似可以按照“請(qǐng)求”的意思理解。
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后面的尖括號(hào)表示Call請(qǐng)求的數(shù)據(jù)類型纵隔。 BOOK為Call的泛型
RetrofitHelper中使用了Retrofit+OkHttp翻诉,可以參考文5。
將文1的所有代碼拷貝到AS中后捌刮,發(fā)現(xiàn)BOOK自動(dòng)導(dǎo)入的內(nèi)容有誤碰煌,去文1的GitHub上復(fù)制了BOOK的實(shí)現(xiàn)才OK.
自己加上了一個(gè)登錄界面,使用的是AS自帶的login模板绅作,為簡單起見拄查,將注冊(cè)功能直接寫成了頁面跳轉(zhuǎn),最終功能有效棚蓄。
baseUrl在RetrofitHelper中。
文1的示例程序中碍脏,MVP是如下實(shí)現(xiàn):Activity由P(即BookPresenter梭依,Presenter則是P包含的通用功能,類BookPresenter是對(duì)這些功能的具體實(shí)現(xiàn))控制典尾,
修改4中的程序:
xmarket后端程序中 接口的格式均在controller中役拴。前端接口則在network中的Req文件中,而Req的調(diào)用則在各個(gè)modelImpl中钾埂。 modelImpl的調(diào)用則在PresenterImpl中河闰。
這是因?yàn)閜ostman顯示格式不對(duì)
但是調(diào)試時(shí)發(fā)現(xiàn)后端剛收到前端的message時(shí)就是NULL褥紫,懷疑是類之間無法直接賦值姜性。 只傳遞基本類型可以傳遞, 考慮將各個(gè)參數(shù)分開傳遞髓考,并在后端存入數(shù)據(jù)庫前部念,為其分配id“惫剑或者參考商品發(fā)布時(shí)的寫法
貌似trade的id一直是null 沒有id 一直到后端的tradebean儡炼,也沒有id,這是因?yàn)閙ongodb的id是在插入之后自動(dòng)分配的。 所以可以認(rèn)為message在使用之前不需要考慮id查蓉。 打算第二天直接拆分參數(shù)乌询!
拆分參數(shù)后,交易功能可用豌研∶锰铮考慮添加計(jì)步功能和轉(zhuǎn)賬功能:
頁面跳轉(zhuǎn)的寫法:從MainActivity跳至Main2Activity:
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//在按鈕響應(yīng)函數(shù)中添加如下兩句話就ok了
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
startActivity(intent);
}
});
在github上找到一個(gè)計(jì)步的項(xiàng)目:
https://github.com/linglongxin24/DylanStepCount
最終成功移植到本項(xiàng)目
為了實(shí)現(xiàn)運(yùn)動(dòng)幣的刷新查詢唬党,模仿xmarket項(xiàng)目,使用SwipeRefreshLayout完成下拉刷新秆麸。相關(guān)資料如下初嘹,該資料還考慮了刷新資源的互斥操作,即只能當(dāng)上次刷新完成后才能進(jìn)行下次刷新沮趣。
Android開發(fā)之SwipeRefreshLayout實(shí)現(xiàn)下拉刷新
http://www.reibang.com/p/97ab87cfce47
運(yùn)動(dòng)幣的查詢則參考用戶交易數(shù)據(jù)的查詢屯烦。 UserTradePresenterImpl
context理解:http://www.reibang.com/p/94e0f9ab3f1d
https://blog.csdn.net/guolin_blog/article/details/47028975
安卓相對(duì)布局屬性:
https://www.cnblogs.com/devinzhang/archive/2012/09/30/2709017.html
控件的出現(xiàn)和消失:
XML 里面:
android:visibility="visible" (其他參數(shù)為invisible 、gone)
代碼里面:
obj.setVisibility(View.VISIBLE);
遇到需要將TextView中的文字轉(zhuǎn)換為數(shù)字的場(chǎng)景房铭,需要使用如下語句:
data=Integer.parseInt(myEditText.getText().toString());
int轉(zhuǎn)換為string:
Integer.toString(step_toCoin)
xmarket項(xiàng)目中驻龟,主頁上的4個(gè)界面分別在各個(gè)fragment中。
由于前后端Team的類型不一樣缸匪,因此考慮在后端進(jìn)行流操作翁狐,返回前端可識(shí)別的類型。流操作資料:https://blog.csdn.net/u010425776/article/details/52344425
采用map方法凌蔬,map函數(shù)需要Lambda表達(dá)式霎箍,相關(guān)資料:https://blog.csdn.net/sanchan/article/details/70753645
查看本校商品時(shí),后端返回給前端的URL為如下格式:
而主頁的分類中的url為:
而兩者在請(qǐng)求圖片時(shí)調(diào)用同一個(gè)fresco函數(shù)
因此將后端中儲(chǔ)存的url加上 /api/v1/file/img ,并將圖片庫復(fù)制到pic_home
最終采用前端直接在公網(wǎng)上下載分類圖片