■Whereをどう書けば?■
Titanium mobileのSDKと違って、Android SDKはほとんど素のREST API SDKです。iOS SDKだと、あまり便利とはいえないけどCCWhereなんてクラスもあって、それなりにラップしてくれます。でもAndroidだと、こんな感じで書く必要があります。
Map<String, Object> q = new HashMap<String, Object>();
q.put("order", "-updated_at");
q.put("where", "{\"email\":\"" + strEmail + "\"}");
CCRequestMethod.GET, q);
…なんかperlでも書いている気分だ…書いたことないけど…。
まぁでも「ほぼREST」だと思ってしまえば、ある意味気は楽です。
ところで、Android 4以降はネットワークアクセスを別スレッドにしないと動いてくれません。
public void acsThread() {
listFriendsRequest = null;
new Thread(new Runnable() {
@Override
public void run() {
acsProcess();
}
}).start();
}
そして終了後に画面切り替えたりするにはHandlerを使う必要があります。
以上をひとまとめにしてACSへのログインをActivity上に書くとこんな感じ。会社で使っているコードを貼るわけにはいかないので、記憶などを頼りにADT上で書いたもの。実働ソースではないので、もし不具合が出たらすみません。
public void acsLogin(String inEmail, String inPassword) {
final String email = inEmail;
final String password = inPassword;
final Handler handler = new Handler();
final JSONObject result = null;
new Thread(new Runnable() {
@Override
public void run() {
CCResponse r = null;
Map<String, Object> q = new HashMap<String, Object>();
q.put("login", email);
q.put("password", password);
try {
r = sdk.sendRequest("users/login.json",
CCRequestMethod.POST, q);
CCMeta m = r.getMeta();
if ("ok".equals(m.getStatus())
&& m.getCode() == 200
&& "loginUser".equals(m.getMethod()))
{
result = r.getResponseData()
.getJSONArray("users")
.getJSONObject(0);
}
}
catch (CocoafishError e) {
e.getMessage();
}
catch (IOException e) {
e.getMessage();
}
catch (Exception ex) {}
if (result != null) {
handler.post(new Runnable() {
@Override
public void run() {
jsonUser = result;
Intent intent = new Intent(MainActivity.this,
NextActivity.class);
startActivity(intent);
}
});
}
}
}).start();
}
何かもう1歩あるくたびにつまずいてググらないと進めない。
まぁiOSアプリ書いている時もそうですけどねorz
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。