W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
將框架目錄下的 ./SDK/JAVA/net 目錄中的全部代碼拷貝到項目里面即可使用。如:
如下是使用的代碼場景片段。
首先,我們需要導入SDK包:
//FullscreenActivity.java
import net.phalapi.sdk.*;
然后,準備一個子線程調(diào)用,并在此線程中實現(xiàn)接口請求:
/**
* 網(wǎng)絡(luò)操作相關(guān)的子線程
*/
Runnable networkTask = new Runnable() {
@Override
public void run() {
// TODO
// 在這里進行 http request.網(wǎng)絡(luò)請求相關(guān)操作
PhalApiClient client = PhalApiClient.create()
.withHost("http://demo.phalapi.net/");
PhalApiClientResponse response = client
.withService("Default.Index")
.withParams("username", "dogstar")
.withTimeout(3000)
.request();
String content = "";
content += "ret=" + response.getRet() + "\n";
if (response.getRet() == 200) {
try {
JSONObject data = new JSONObject(response.getData());
content += "data.title=" + data.getString("title") + "\n";
content += "data.content=" + data.getString("content") + "\n";
content += "data.version=" + data.getString("version") + "\n";
} catch (JSONException ex) {
}
}
content += "msg=" + response.getMsg() + "\n";
Log.v("[PhalApiClientResponse]", content);
Message msg = new Message();
Bundle data = new Bundle();
data.putString("value", content);
msg.setData(data);
handler.sendMessage(msg);
}
};
接著,實現(xiàn)線程回調(diào)的hander:
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bundle data = msg.getData();
String val = data.getString("value");
Log.i("mylog", "請求結(jié)果為-->" + val);
// TODO
// UI界面的更新等相關(guān)操作
}
};
最后,在我們需要的地方啟動:
View.OnClickListener mDummyBtnClickListener = new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// 開啟一個子線程,進行網(wǎng)絡(luò)操作,等待有返回結(jié)果,使用handler通知UI
new Thread(networkTask).start();
// ....
}
};
當我們需要再次使用同一個接口實例進行請求時,需要先進行重置,以便清空之前的接口參數(shù),如:
//再一次請求
response = client.reset() //重置
.withService("User.GetBaseInfo")
.withParams("user_id", "1")
.request();
content = "";
content += "ret=" + response.getRet() + "\n";
if (response.getRet() == 200) {
try {
JSONObject data = new JSONObject(response.getData());
JSONObject info = new JSONObject(data.getString("info"));
content += "data.info.id=" + info.getString("id") + "\n";
content += "data.info.name=" + info.getString("name") + "\n";
content += "data.info.from=" + info.getString("from") + "\n";
} catch (JSONException ex) {
}
}
content += "msg=" + response.getMsg() + "\n";
Log.v("[PhalApiClientResponse]", content);
異常情況下,即ret != 200時,將返回錯誤的信息,如:
//再來試一下異常的請求
response = client.reset()
.withService("XXX.XXXX")
.withParams("user_id", "1")
.request();
content = "";
content += "ret=" + response.getRet() + "\n";
content += "msg=" + response.getMsg() + "\n";
Log.v("[PhalApiClientResponse]", content);
運行后,查詢log,可以看到:
可以注意到,在調(diào)試模式時,會有接口請求的鏈接和返回的結(jié)果日志,如:
10-17 07:40:55.268: D/[PhalApiClient requestUrl](1376): http://demo.phalapi.net/?service=User.GetBaseInfo&user_id=1
10-17 07:40:55.364: D/[PhalApiClient apiResult](1376): {"ret":200,"data":{"code":0,"msg":"","info":{"id":"1","name":"dogstar","from":"oschina"}},"msg":""}
當服務(wù)端接口需要接口簽名驗證,或者接口參數(shù)加密傳送,或者壓縮傳送時,可以實現(xiàn)此過濾器,以便和服務(wù)端操持一致。
當需要擴展時,分兩步。首先,需要實現(xiàn)過濾器接口:
class MyFilter implements PhalApiClientFilter {
public void filter(String service, Map<String, String> params) {
//TODO ...
}
}
然后設(shè)置過濾器:
PhalApiClientResponse response = PhalApiClient.create()
.withHost("http://demo.phalapi.net/")
.withFilter(new MyFilter())
// ...
.request();
當返回的接口結(jié)果不是JSON格式時,可以重新實現(xiàn)此接口。
當需要擴展時,同樣分兩步。類似過濾器擴展,這里不再贅述。
由于此SDK包是使用HttpURLConnection發(fā)起請求時,所以在主線程調(diào)用時會觸發(fā)NetworkOnMainThreadException異常,具體可參考: Android之NetworkOnMainThreadException異常
所以,需要使用子線程來發(fā)起請求,或者重新繼承改用異步的請求。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: