You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
software/GTaskClient.java

808 lines
31 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*
* Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.micode.notes.gtask.remote;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.AccountManagerFuture;
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import net.micode.notes.gtask.data.Node;
import net.micode.notes.gtask.data.Task;
import net.micode.notes.gtask.data.TaskList;
import net.micode.notes.gtask.exception.ActionFailureException;
import net.micode.notes.gtask.exception.NetworkFailureException;
import net.micode.notes.tool.GTaskStringUtils;
import net.micode.notes.ui.NotesPreferenceActivity;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;
import java.util.zip.GZIPInputStream;
import java.util.zip.Inflater;
import java.util.zip.InflaterInputStream;
/*
* GTaskClient<6E><74><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Google<6C><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD>Ŀͻ<C4BF><CDBB><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>񡢴<EFBFBD><F1A1A2B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȹ<EFBFBD><C8B9>ܡ<EFBFBD>
*/
public class GTaskClient {
private static final String TAG = GTaskClient.class.getSimpleName();
private static final String GTASK_URL = "https://mail.google.com/tasks/";
private static final String GTASK_GET_URL = "https://mail.google.com/tasks/ig";
private static final String GTASK_POST_URL = "https://mail.google.com/tasks/r/ig";
private static GTaskClient mInstance = null;
private DefaultHttpClient mHttpClient;
private String mGetUrl;
private String mPostUrl;
private long mClientVersion;
private boolean mLoggedin;
private long mLastLoginTime;
private int mActionId;
private Account mAccount;
private JSONArray mUpdateArray;
/*
* ˽<>й<EFBFBD><D0B9><EFBFBD><ECBAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
private GTaskClient() {
mHttpClient = null; // <20><>ʼ<EFBFBD><CABC>HttpClientΪnull
mGetUrl = GTASK_GET_URL; // <20><>ʼ<EFBFBD><CABC>GET<45><54>POST<53><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>URL
mPostUrl = GTASK_POST_URL;
mClientVersion = -1; // <20><>ʼ<EFBFBD><CABC><EFBFBD>ͻ<EFBFBD><CDBB>˰汾<CBB0><E6B1BE>Ϊ-1
mLoggedin = false; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>¼״̬Ϊfalse
mLastLoginTime = 0; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ε<EFBFBD>¼ʱ<C2BC><CAB1>Ϊ0
mActionId = 1; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IDΪ1
mAccount = null; // <20><>ʼ<EFBFBD><CABC><EFBFBD>˻<EFBFBD>Ϊnull
mUpdateArray = null; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊnull
}
/*
* <20><>ȡGTaskClient<6E>ĵ<EFBFBD><C4B5><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>
* @return GTaskClient<6E>ĵ<EFBFBD><C4B5><EFBFBD>ʵ<EFBFBD><CAB5>
*/
public static synchronized GTaskClient getInstance() {
// <20><><EFBFBD><EFBFBD>mInstanceΪnull<6C><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>µ<EFBFBD>GTaskClientʵ<74><CAB5>
if (mInstance == null) {
mInstance = new GTaskClient();
}
// <20><><EFBFBD><EFBFBD>GTaskClient<6E>ĵ<EFBFBD><C4B5><EFBFBD>ʵ<EFBFBD><CAB5>
return mInstance;
}
/*
* <20><>¼Google<6C><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param activity <20><>ǰ<EFBFBD>
* @return <20>Ƿ<EFBFBD><C7B7><EFBFBD>¼<EFBFBD>ɹ<EFBFBD>
*/
public boolean login(Activity activity) {
// we suppose that the cookie would expire after 5 minutes
// <20><><EFBFBD><EFBFBD>cookie<69><65>5<EFBFBD><35><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>µ<EFBFBD>¼
// then we need to re-login
final long interval = 1000 * 60 * 5;
if (mLastLoginTime + interval < System.currentTimeMillis()) {
mLoggedin = false;
}
// need to re-login after account switch
// <20><>Ҫ<EFBFBD><D2AA><EFBFBD>µ<EFBFBD>¼<EFBFBD><C2BC><EFBFBD>л<EFBFBD><D0BB>˻<EFBFBD>
if (mLoggedin
&& !TextUtils.equals(getSyncAccount().name, NotesPreferenceActivity
.getSyncAccountName(activity))) {
mLoggedin = false;
}
// <20><><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD>¼<EFBFBD><C2BC>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>true
if (mLoggedin) {
Log.d(TAG, "already logged in");
return true;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ε<EFBFBD>¼ʱ<C2BC><CAB1>
mLastLoginTime = System.currentTimeMillis();
// <20><>¼Google<6C>˻<EFBFBD>
String authToken = loginGoogleAccount(activity, false);
if (authToken == null) {
Log.e(TAG, "login google account failed");
return false;
}
// login with custom domain if necessary
// <20><><EFBFBD><EFBFBD><EFBFBD>˻<EFBFBD><CBBB><EFBFBD><EFBFBD><EFBFBD>gmail.com<6F><6D>googlemail.com<6F><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
if (!(mAccount.name.toLowerCase().endsWith("gmail.com") || mAccount.name.toLowerCase()
.endsWith("googlemail.com"))) {
StringBuilder url = new StringBuilder(GTASK_URL).append("a/");
int index = mAccount.name.indexOf('@') + 1;
String suffix = mAccount.name.substring(index);
url.append(suffix + "/");
mGetUrl = url.toString() + "ig";
mPostUrl = url.toString() + "r/ig";
if (tryToLoginGtask(activity, authToken)) {
mLoggedin = true;
}
}
// try to login with google official url
// <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>Google<6C>ٷ<EFBFBD>URL<52><4C>¼
if (!mLoggedin) {
mGetUrl = GTASK_GET_URL;
mPostUrl = GTASK_POST_URL;
if (!tryToLoginGtask(activity, authToken)) {
return false;
}
}
// <20><>¼<EFBFBD>ɹ<EFBFBD>
mLoggedin = true;
return true;
}
/*
* <20><>¼Google<6C>˻<EFBFBD><CBBB><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>Ȩ<EFBFBD><C8A8><EFBFBD>ơ<EFBFBD>
* @param activity <20><>ǰ<EFBFBD>
* @param invalidateToken <20>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD>ʧЧ
* @return <20><>Ȩ<EFBFBD><C8A8><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼ʧ<C2BC><CAA7><EFBFBD>򷵻<EFBFBD>null
*/
private String loginGoogleAccount(Activity activity, boolean invalidateToken) {
String authToken;
// <20><>ȡAccountManagerʵ<72><CAB5>
AccountManager accountManager = AccountManager.get(activity);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Google<6C>˻<EFBFBD>
Account[] accounts = accountManager.getAccountsByType("com.google");
// <20><><EFBFBD><EFBFBD>û<EFBFBD>п<EFBFBD><D0BF>õ<EFBFBD>Google<6C>˻<EFBFBD><CBBB><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>null
if (accounts.length == 0) {
Log.e(TAG, "there is no available google account");
return null;
}
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>˻<EFBFBD><CBBB><EFBFBD><EFBFBD><EFBFBD>
String accountName = NotesPreferenceActivity.getSyncAccountName(activity);
Account account = null;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Google<6C>˻<EFBFBD><CBBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>˻<EFBFBD><CBBB><EFBFBD><EFBFBD><EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD><EFBFBD>˻<EFBFBD>
for (Account a : accounts) {
if (a.name.equals(accountName)) {
account = a;
break;
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD><EFBFBD>˻<EFBFBD><CBBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>丳ֵ<E4B8B3><D6B5>mAccount
if (account != null) {
mAccount = account;
} else {
// <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ҵ<EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD><EFBFBD>˻<EFBFBD><CBBB><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>null
Log.e(TAG, "unable to get an account with the same name in the settings");
return null;
}
// get the token now
// <20><>ȡ<EFBFBD><C8A1>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD>
AccountManagerFuture<Bundle> accountManagerFuture = accountManager.getAuthToken(account,
"goanna_mobile", null, activity, null, null);
try {
// <20><>ȡ<EFBFBD><C8A1>Ȩ<EFBFBD><C8A8><EFBFBD>Ƶ<EFBFBD>Bundle
Bundle authTokenBundle = accountManagerFuture.getResult();
// <20><>Bundle<6C>л<EFBFBD>ȡ<EFBFBD><C8A1>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD>
authToken = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫʹ<D2AA><CAB9>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD>ʧЧ<CAA7><D0A7>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>ʧЧ<CAA7><D0A7><EFBFBD><EFBFBD><EFBFBD>»<EFBFBD>ȡ
if (invalidateToken) {
accountManager.invalidateAuthToken("com.google", authToken);
loginGoogleAccount(activity, false);
}
} catch (Exception e) {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>null
Log.e(TAG, "get auth token failed");
authToken = null;
}
return authToken; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD>
}
/*
* <20><><EFBFBD>Ե<EFBFBD>¼Google<6C><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param activity <20><>ǰ<EFBFBD>
* @param authToken <20><>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD>
* @return <20>Ƿ<EFBFBD><C7B7><EFBFBD>¼<EFBFBD>ɹ<EFBFBD>
*/
private boolean tryToLoginGtask(Activity activity, String authToken) {
// <20><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD>ǰ<EFBFBD><C7B0>Ȩ<EFBFBD><C8A8><EFBFBD>Ƶ<EFBFBD>¼Google<6C><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (!loginGtask(authToken)) {
// maybe the auth token is out of date, now let's invalidate the
// token and try again
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼ʧ<C2BC>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>ڣ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>ʧЧ<CAA7><D0A7><EFBFBD><EFBFBD><EFBFBD>»<EFBFBD>ȡ
authToken = loginGoogleAccount(activity, true);
if (authToken == null) {
Log.e(TAG, "login google account failed");
return false;
}
// ʹ<><CAB9><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD>ٴγ<D9B4><CEB3>Ե<EFBFBD>¼Google<6C><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (!loginGtask(authToken)) {
Log.e(TAG, "login gtask failed");
return false;
}
}
return true;
}
/*
* ʹ<><CAB9><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD>Ƶ<EFBFBD>¼Google<6C><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param authToken <20><>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD>
* @return <20>Ƿ<EFBFBD><C7B7><EFBFBD>¼<EFBFBD>ɹ<EFBFBD>
*/
private boolean loginGtask(String authToken) {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>׽<EFBFBD><D7BD>ֳ<EFBFBD>ʱ
int timeoutConnection = 10000;
int timeoutSocket = 15000;
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
// <20><><EFBFBD><EFBFBD>DefaultHttpClientʵ<74><CAB5>
mHttpClient = new DefaultHttpClient(httpParameters);
// <20><><EFBFBD><EFBFBD>BasicCookieStoreʵ<65><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>HttpClient<6E><74>
BasicCookieStore localBasicCookieStore = new BasicCookieStore();
mHttpClient.setCookieStore(localBasicCookieStore);
// <20><><EFBFBD><EFBFBD>HttpClient<6E><74>ʹ<EFBFBD><CAB9>Expect-Continue
HttpProtocolParams.setUseExpectContinue(mHttpClient.getParams(), false);
// login gtask
// <20><>¼Google<6C><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
try {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼URL
String loginUrl = mGetUrl + "?auth=" + authToken;
HttpGet httpGet = new HttpGet(loginUrl);
HttpResponse response = null;
response = mHttpClient.execute(httpGet);
// get the cookie now
// <20><>ȡcookie
List<Cookie> cookies = mHttpClient.getCookieStore().getCookies();
boolean hasAuthCookie = false;
for (Cookie cookie : cookies) {
if (cookie.getName().contains("GTL")) {
hasAuthCookie = true;
}
}
if (!hasAuthCookie) {
Log.w(TAG, "it seems that there is no auth cookie");
}
// get the client version
// <20><>ȡ<EFBFBD>ͻ<EFBFBD><CDBB>˰汾
String resString = getResponseContent(response.getEntity());
String jsBegin = "_setup(";
String jsEnd = ")}</script>";
int begin = resString.indexOf(jsBegin);
int end = resString.lastIndexOf(jsEnd);
String jsString = null;
if (begin != -1 && end != -1 && begin < end) {
jsString = resString.substring(begin + jsBegin.length(), end);
}
JSONObject js = new JSONObject(jsString);
mClientVersion = js.getLong("v");
} catch (JSONException e) {
Log.e(TAG, e.toString());
e.printStackTrace();
return false;
} catch (Exception e) {
// simply catch all exceptions
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Log.e(TAG, "httpget gtask_url failed");
return false;
}
return true;
}
/*
* <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ID
*/
private int getActionId() {
// <20><><EFBFBD>ص<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return mActionId++;
}
/*
* <20><><EFBFBD><EFBFBD>HttpPost<73><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>HttpPost<73><74><EFBFBD><EFBFBD>
*/
private HttpPost createHttpPost() {
// <20><><EFBFBD><EFBFBD>HttpPost<73><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>URL
HttpPost httpPost = new HttpPost(mPostUrl);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ָ<EFBFBD><D6B8>Content-TypeΪapplication/x-www-form-urlencoded<65><64><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ΪUTF-8
httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
httpPost.setHeader("AT", "1");
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ָ<EFBFBD><D6B8>ATΪ1
return httpPost;
// <20><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>HttpPost<73><74><EFBFBD><EFBFBD>
}
/*
* <20><>HttpEntity<74>л<EFBFBD>ȡ<EFBFBD><C8A1>Ӧ<EFBFBD><D3A6><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>
* ֧<>ִ<EFBFBD><D6B4><EFBFBD>gzip<69><70>deflateѹ<65><D1B9><EFBFBD><EFBFBD><EFBFBD>
* @param entity HTTP<54><50>Ӧʵ<D3A6><CAB5>
* @return <20><>Ӧ<EFBFBD><D3A6><EFBFBD>ݵ<EFBFBD><DDB5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ
* @throws IOException <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
private String getResponseContent(HttpEntity entity) throws IOException {
String contentEncoding = null;
// <20><><EFBFBD><EFBFBD>HttpEntity<74>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>Content-Encodingͷ<67><CDB7>
if (entity.getContentEncoding() != null) {
// <20><>ȡContent-Encoding<6E><67>ֵ
contentEncoding = entity.getContentEncoding().getValue();
// <20><>¼<EFBFBD><C2BC>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ǰ<EFBFBD><C7B0>Content-Encoding
Log.d(TAG, "encoding: " + contentEncoding);
}
// <20><>ȡHttpEntity<74><79>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
InputStream input = entity.getContent();
// <20><><EFBFBD><EFBFBD>Content-Encoding<6E><67>gzip<69><70><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>GZIPInputStream<61><6D>ѹ<EFBFBD><D1B9>
if (contentEncoding != null && contentEncoding.equalsIgnoreCase("gzip")) {
input = new GZIPInputStream(entity.getContent());
} else if (contentEncoding != null && contentEncoding.equalsIgnoreCase("deflate")) {
// <20><><EFBFBD><EFBFBD>Content-Encoding<6E><67>deflate<74><65><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>InflaterInputStream<61><6D>ѹ<EFBFBD><D1B9>
Inflater inflater = new Inflater(true);
input = new InflaterInputStream(entity.getContent(), inflater);
}
try {
// <20><><EFBFBD><EFBFBD>InputStreamReader<65><72><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD>ֽ<EFBFBD><D6BD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
InputStreamReader isr = new InputStreamReader(input);
// <20><><EFBFBD><EFBFBD>BufferedReader<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ȡ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
BufferedReader br = new BufferedReader(isr);
// <20><><EFBFBD><EFBFBD>StringBuilder<65><72><EFBFBD><EFBFBD><EFBFBD>ڴ洢<DAB4><E6B4A2>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
StringBuilder sb = new StringBuilder();
// ѭ<><D1AD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ÿһ<C3BF><D2BB>
while (true) {
String buff = br.readLine();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>null<6C><6C><EFBFBD><EFBFBD>ʾ<EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĩβ<C4A9><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>StringBuilder<65>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
if (buff == null) {
return sb.toString();
}
// <20><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׷<EFBFBD>ӵ<EFBFBD>StringBuilder<65><72>
sb = sb.append(buff);
}
} finally {
// ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ر<EFBFBD>
input.close();
}
}
/*
* <20><><EFBFBD><EFBFBD>POST<53><54><EFBFBD>󲢷<EFBFBD><F3B2A2B7><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>JSONObject<63><74>
* @param js Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>JSONObject<63><74>ʽ<EFBFBD><CABD>ʾ
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>JSONObject
* @throws NetworkFailureException <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
* @throws ActionFailureException <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD>ת<EFBFBD><D7AA>ΪJSONObject<63><74>
*/
private JSONObject postRequest(JSONObject js) throws NetworkFailureException {
// <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB>Ƿ<EFBFBD><C7B7>ѵ<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>¼<EFBFBD><C2BC><EFBFBD>׳<EFBFBD><D7B3>
if (!mLoggedin) {
Log.e(TAG, "please login first");
throw new ActionFailureException("not logged in");
}
// <20><><EFBFBD><EFBFBD>HttpPost<73><74><EFBFBD><EFBFBD>
HttpPost httpPost = createHttpPost();
try {
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>LinkedList<73><74><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LinkedList<BasicNameValuePair> list = new LinkedList<BasicNameValuePair>();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>JSONObject<63><74>ת<EFBFBD><D7AA>Ϊ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
list.add(new BasicNameValuePair("r", js.toString()));
// <20><><EFBFBD><EFBFBD>UrlEncodedFormEntity<74><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, "UTF-8");
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>HttpPost<73><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
httpPost.setEntity(entity);
// execute the post
// ִ<><D6B4>POST<53><54><EFBFBD><EFBFBD>
HttpResponse response = mHttpClient.execute(httpPost);
// <20><>ȡ<EFBFBD><C8A1>Ӧ<EFBFBD><D3A6><EFBFBD>ݲ<EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
String jsString = getResponseContent(response.getEntity());
// <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ת<EFBFBD><D7AA>ΪJSONObject<63><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return new JSONObject(jsString);
} catch (ClientProtocolException e) {
// <20><><EFBFBD>񲢼<EFBFBD>¼HTTPЭ<50><D0AD><EFBFBD>
Log.e(TAG, e.toString());
e.printStackTrace();
throw new NetworkFailureException("postRequest failed");
} catch (IOException e) {
// <20><><EFBFBD>񲢼<EFBFBD>¼IO<49>
Log.e(TAG, e.toString());
e.printStackTrace();
throw new NetworkFailureException("postRequest failed");
} catch (JSONException e) {
// <20><><EFBFBD>񲢼<EFBFBD>¼JSON<4F><4E><EFBFBD><EFBFBD><EFBFBD>
Log.e(TAG, e.toString());
e.printStackTrace();
throw new ActionFailureException("unable to convert response content to jsonobject");
} catch (Exception e) {
// <20><><EFBFBD>񲢼<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>
Log.e(TAG, e.toString());
e.printStackTrace();
throw new ActionFailureException("error occurs when posting request");
}
}
/*
* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD>񣬲<EFBFBD><F1A3ACB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param task Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @throws NetworkFailureException <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
* @throws ActionFailureException <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>JSON<4F><4E><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>
*/
public void createTask(Task task) throws NetworkFailureException {
// <20><EFBFBD><E1BDBB><EFBFBD>²<EFBFBD><C2B2><EFBFBD>
commitUpdate();
try {
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>µ<EFBFBD>JSONObject<63><74><EFBFBD><EFBFBD><EFBFBD>ڴ洢POST<53><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
JSONObject jsPost = new JSONObject();
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>JSONArray<61><79><EFBFBD><EFBFBD><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
JSONArray actionList = new JSONArray();
// action_list
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>actionList<73><74>
actionList.put(task.getCreateAction(getActionId()));
// <20><>actionList<73><74><EFBFBD>ӵ<EFBFBD>jsPost<73><74>
jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList);
// client_version
// <20><><EFBFBD>ӿͻ<D3BF><CDBB>˰汾<CBB0><E6B1BE>Ϣ<EFBFBD><CFA2>jsPost<73><74>
jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion);
// post
// <20><><EFBFBD><EFBFBD>POST<53><54><EFBFBD>󣬲<EFBFBD><F3A3ACB2><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪJSONObject
JSONObject jsResponse = postRequest(jsPost);
// <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD>л<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
JSONObject jsResult = (JSONObject) jsResponse.getJSONArray(
GTaskStringUtils.GTASK_JSON_RESULTS).get(0);
// <20>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD>л<EFBFBD>ȡ<EFBFBD>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
task.setGid(jsResult.getString(GTaskStringUtils.GTASK_JSON_NEW_ID));
} catch (JSONException e) {<EFBFBD><EFBFBD>
// <20><><EFBFBD>񲢼<EFBFBD>¼JSON<4F><4E><EFBFBD><EFBFBD><EFBFBD>
Log.e(TAG, e.toString());
e.printStackTrace();
throw new ActionFailureException("create task: handing jsonobject failed");
}
}
/*
* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param tasklist Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>
* @throws NetworkFailureException <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
* @throws ActionFailureException <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>JSON<4F><4E><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>
*/
public void createTaskList(TaskList tasklist) throws NetworkFailureException {
// <20><EFBFBD><E1BDBB><EFBFBD>²<EFBFBD><C2B2><EFBFBD>
commitUpdate();
try {
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>µ<EFBFBD>JSONObject<63><74><EFBFBD><EFBFBD><EFBFBD>ڴ洢POST<53><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
JSONObject jsPost = new JSONObject();
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>JSONArray<61><79><EFBFBD><EFBFBD><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
JSONArray actionList = new JSONArray();
// action_list
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>actionList<73><74>
actionList.put(tasklist.getCreateAction(getActionId()));
// <20><>actionList<73><74><EFBFBD>ӵ<EFBFBD>jsPost<73><74>
jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList);
// client version
// <20><><EFBFBD>ӿͻ<D3BF><CDBB>˰汾<CBB0><E6B1BE>Ϣ<EFBFBD><CFA2>jsPost<73><74>
jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion);
// post
// <20><><EFBFBD><EFBFBD>POST<53><54><EFBFBD>󣬲<EFBFBD><F3A3ACB2><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪJSONObject
JSONObject jsResponse = postRequest(jsPost);
// <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD>л<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
JSONObject jsResult = (JSONObject) jsResponse.getJSONArray(
GTaskStringUtils.GTASK_JSON_RESULTS).get(0);
// <20>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD>л<EFBFBD>ȡ<EFBFBD>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tasklist.setGid(jsResult.getString(GTaskStringUtils.GTASK_JSON_NEW_ID));
} catch (JSONException e) {
// <20><><EFBFBD>񲢼<EFBFBD>¼JSON<4F><4E><EFBFBD><EFBFBD><EFBFBD>
Log.e(TAG, e.toString());
e.printStackTrace();
throw new ActionFailureException("create tasklist: handing jsonobject failed");
}
}
/*
* <20><EFBFBD><E1BDBB><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD>ɵĸ<C9B5><C4B8>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @throws NetworkFailureException <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
* @throws ActionFailureException <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>JSON<4F><4E><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>
*/
public void commitUpdate() throws NetworkFailureException {
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>δ<EFBFBD><CEB4><EFBFBD>ɵĸ<C9B5><C4B8>²<EFBFBD><C2B2><EFBFBD>
if (mUpdateArray != null) {
try {
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>µ<EFBFBD>JSONObject<63><74><EFBFBD><EFBFBD><EFBFBD>ڴ洢POST<53><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
JSONObject jsPost = new JSONObject();
// action_list
// <20><>δ<EFBFBD><CEB4><EFBFBD>ɵĸ<C9B5><C4B8>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>jsPost<73><74>
jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, mUpdateArray);
// client_version
// <20><><EFBFBD>ӿͻ<D3BF><CDBB>˰汾<CBB0><E6B1BE>Ϣ<EFBFBD><CFA2>jsPost<73><74>
jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion);
// <20><><EFBFBD><EFBFBD>POST<53><54><EFBFBD><EFBFBD>
postRequest(jsPost);
// <20><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD><D5B8>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mUpdateArray = null;
} catch (JSONException e) {
// <20><><EFBFBD>񲢼<EFBFBD>¼JSON<4F><4E><EFBFBD><EFBFBD><EFBFBD>
Log.e(TAG, e.toString());
e.printStackTrace();
throw new ActionFailureException("commit update: handing jsonobject failed");
}
}
}
/*
* <20><>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>ڱ<EFBFBD>Ҫʱ<D2AA><EFBFBD><E1BDBB><EFBFBD>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD>
* @param node Ҫ<><D2AA><EFBFBD>ӵĽڵ<C4BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
* @throws NetworkFailureException <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*/
public void addUpdateNode(Node node) throws NetworkFailureException {
// <20><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA>
if (node != null) {
// too many update items may result in an error
// set max to 10 items
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE>г<EFBFBD><D0B3><EFBFBD>10<31><30><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1BDBB><EFBFBD>²<EFBFBD><C2B2><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><C2B4><EFBFBD>
if (mUpdateArray != null && mUpdateArray.length() > 10) {
commitUpdate();
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>գ<EFBFBD><D5A3>򴴽<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>µ<EFBFBD>JSONArray
if (mUpdateArray == null)
mUpdateArray = new JSONArray();
// <20><><EFBFBD>ڵ<EFBFBD><DAB5>ĸ<EFBFBD><C4B8>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mUpdateArray.put(node.getUpdateAction(getActionId()));
}
}
/*
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
* @param task Ҫ<>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param preParent <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
* @param curParent <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD><C2B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
* @throws NetworkFailureException <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
* @throws ActionFailureException <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>JSON<4F><4E><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>
*/
public void moveTask(Task task, TaskList preParent, TaskList curParent)
throws NetworkFailureException {
// <20><EFBFBD><E1BDBB><EFBFBD>²<EFBFBD><C2B2><EFBFBD>
commitUpdate();
try {
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>µ<EFBFBD>JSONObject<63><74><EFBFBD><EFBFBD><EFBFBD>ڴ洢POST<53><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
JSONObject jsPost = new JSONObject();
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>JSONArray<61><79><EFBFBD><EFBFBD><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>
JSONArray actionList = new JSONArray();
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>JSONObject<63><74><EFBFBD><EFBFBD><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>
JSONObject action = new JSONObject();
// action_list
// <20><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ"move"
action.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE,
GTaskStringUtils.GTASK_JSON_ACTION_TYPE_MOVE);
// <20><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
action.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, getActionId());
// <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
action.put(GTaskStringUtils.GTASK_JSON_ID, task.getGid());
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬһ<CDAC><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2>ǵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰһ<C7B0><D2BB><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
if (preParent == curParent && task.getPriorSibling() != null) {
// put prioring_sibing_id only if moving within the tasklist and
// it is not the first one
action.put(GTaskStringUtils.GTASK_JSON_PRIOR_SIBLING_ID, task.getPriorSibling());
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ID
action.put(GTaskStringUtils.GTASK_JSON_SOURCE_LIST, preParent.getGid());
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD><C2B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ID
action.put(GTaskStringUtils.GTASK_JSON_DEST_PARENT, curParent.getGid());
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>֮<EFBFBD><D6AE><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ID
if (preParent != curParent) {
// put the dest_list only if moving between tasklists
action.put(GTaskStringUtils.GTASK_JSON_DEST_LIST, curParent.getGid());
}
// <20><><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>actionList<73><74>
actionList.put(action);
// <20><>actionList<73><74><EFBFBD>ӵ<EFBFBD>jsPost<73><74>
jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList);
// client_version
// <20><><EFBFBD>ӿͻ<D3BF><CDBB>˰汾<CBB0><E6B1BE>Ϣ<EFBFBD><CFA2>jsPost<73><74>
jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion);
// <20><><EFBFBD><EFBFBD>POST<53><54><EFBFBD><EFBFBD>
postRequest(jsPost);
} catch (JSONException e) {
// <20><><EFBFBD>񲢼<EFBFBD>¼JSON<4F><4E><EFBFBD><EFBFBD><EFBFBD>
Log.e(TAG, e.toString());
e.printStackTrace();
throw new ActionFailureException("move task: handing jsonobject failed");
}
}
/*
* ɾ<><C9BE>һ<EFBFBD><D2BB><EFBFBD>ڵ㣬<DAB5><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ɾ<EFBFBD><C9BE>״̬<D7B4><CCAC>
* @param node Ҫɾ<D2AA><C9BE><EFBFBD>Ľڵ<C4BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
* @throws NetworkFailureException <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
* @throws ActionFailureException <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>JSON<4F><4E><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>
*/
public void deleteNode(Node node) throws NetworkFailureException {
// <20><EFBFBD><E1BDBB><EFBFBD>²<EFBFBD><C2B2><EFBFBD>
commitUpdate();
try {
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>µ<EFBFBD>JSONObject<63><74><EFBFBD><EFBFBD><EFBFBD>ڴ洢POST<53><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
JSONObject jsPost = new JSONObject();
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>JSONArray<61><79><EFBFBD><EFBFBD><EFBFBD>ڴ洢<DAB4>ڵ<EFBFBD><DAB5><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
JSONArray actionList = new JSONArray();
// action_list
// <20><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ɾ<EFBFBD><C9BE>
node.setDeleted(true);
// <20><>ȡ<EFBFBD>ڵ<EFBFBD><DAB5>ĸ<EFBFBD><C4B8>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>actionList<73><74>
actionList.put(node.getUpdateAction(getActionId()));
// <20><>actionList<73><74><EFBFBD>ӵ<EFBFBD>jsPost<73><74>
jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList);
// client_version
// <20><><EFBFBD>ӿͻ<D3BF><CDBB>˰汾<CBB0><E6B1BE>Ϣ<EFBFBD><CFA2>jsPost<73><74>
jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion);
// <20><><EFBFBD><EFBFBD>POST<53><54><EFBFBD><EFBFBD>
postRequest(jsPost);
// <20><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD><D5B8>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mUpdateArray = null;
} catch (JSONException e) {
// <20><><EFBFBD>񲢼<EFBFBD>¼JSON<4F><4E><EFBFBD><EFBFBD><EFBFBD>
Log.e(TAG, e.toString());
e.printStackTrace();
throw new ActionFailureException("delete node: handing jsonobject failed");
}
}
/*
* <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>JSONArray<61><79>
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>JSONArray
* @throws NetworkFailureException <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
* @throws ActionFailureException <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>¼<EFBFBD><C2BC>JSON<4F><4E><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>
*/
public JSONArray getTaskLists() throws NetworkFailureException {
// <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB>Ƿ<EFBFBD><C7B7>ѵ<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>¼<EFBFBD><C2BC><EFBFBD>׳<EFBFBD><D7B3>
if (!mLoggedin) {
Log.e(TAG, "please login first");
throw new ActionFailureException("not logged in");
}
try {
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>HttpGet<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD>GET<45><54><EFBFBD><EFBFBD>
HttpGet httpGet = new HttpGet(mGetUrl);
HttpResponse response = null;
// ִ<><D6B4>GET<45><54><EFBFBD>󣬲<EFBFBD><F3A3ACB2><EFBFBD>ȡ<EFBFBD><C8A1>Ӧ
response = mHttpClient.execute(httpGet);
// get the task list
// <20><>ȡ<EFBFBD><C8A1>Ӧ<EFBFBD><D3A6><EFBFBD>ݲ<EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
String resString = getResponseContent(response.getEntity());
// <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>JSON<4F>ַ<EFBFBD><D6B7><EFBFBD>
String jsBegin = "_setup(";
String jsEnd = ")}</script>";
int begin = resString.indexOf(jsBegin);
int end = resString.lastIndexOf(jsEnd);
String jsString = null;
if (begin != -1 && end != -1 && begin < end) {
jsString = resString.substring(begin + jsBegin.length(), end);
}
// <20><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>JSON<4F>ַ<EFBFBD><D6B7><EFBFBD>ת<EFBFBD><D7AA>ΪJSONObject
JSONObject js = new JSONObject(jsString);
// <20><>JSONObject<63>л<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>JSONArray<61><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return js.getJSONObject("t").getJSONArray(GTaskStringUtils.GTASK_JSON_LISTS);
} catch (ClientProtocolException e) {
// <20><><EFBFBD>񲢼<EFBFBD>¼HTTPЭ<50><D0AD><EFBFBD>
Log.e(TAG, e.toString());
e.printStackTrace();
throw new NetworkFailureException("gettasklists: httpget failed");
} catch (IOException e) {
// <20><><EFBFBD>񲢼<EFBFBD>¼IO<49>
Log.e(TAG, e.toString());
e.printStackTrace();
throw new NetworkFailureException("gettasklists: httpget failed");
} catch (JSONException e) {
// <20><><EFBFBD>񲢼<EFBFBD>¼JSON<4F><4E><EFBFBD><EFBFBD><EFBFBD>
Log.e(TAG, e.toString());
e.printStackTrace();
throw new ActionFailureException("get task lists: handing jasonobject failed");
}
}
/*
* <20><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>񣬲<EFBFBD><F1A3ACB2><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>JSONArray<61><79>
* @param listGid <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ID
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>JSONArray
* @throws NetworkFailureException <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
* @throws ActionFailureException <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>JSON<4F><4E><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>
*/
public JSONArray getTaskList(String listGid) throws NetworkFailureException {
// <20><EFBFBD><E1BDBB><EFBFBD>²<EFBFBD><C2B2><EFBFBD>
commitUpdate();
try {
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>µ<EFBFBD>JSONObject<63><74><EFBFBD><EFBFBD><EFBFBD>ڴ洢POST<53><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
JSONObject jsPost = new JSONObject();
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>JSONArray<61><79><EFBFBD><EFBFBD><EFBFBD>ڴ洢<DAB4><E6B4A2>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1>IJ<EFBFBD><C4B2><EFBFBD>
JSONArray actionList = new JSONArray();
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>JSONObject<63><74><EFBFBD><EFBFBD><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
JSONObject action = new JSONObject();
// action_list
// <20><><EFBFBD>û<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ"getall"
action.put(GTaskStringUtils.GTASK_JSON_ACTION_TYPE,
GTaskStringUtils.GTASK_JSON_ACTION_TYPE_GETALL);
// <20><><EFBFBD>û<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
action.put(GTaskStringUtils.GTASK_JSON_ACTION_ID, getActionId());
// <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ID
action.put(GTaskStringUtils.GTASK_JSON_LIST_ID, listGid);
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȡ<EFBFBD><C8A1>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊfalse
action.put(GTaskStringUtils.GTASK_JSON_GET_DELETED, false);
// <20><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>actionList<73><74>
actionList.put(action);
// <20><>actionList<73><74><EFBFBD>ӵ<EFBFBD>jsPost<73><74>
jsPost.put(GTaskStringUtils.GTASK_JSON_ACTION_LIST, actionList);
// client_version
// <20><><EFBFBD>ӿͻ<D3BF><CDBB>˰汾<CBB0><E6B1BE>Ϣ<EFBFBD><CFA2>jsPost<73><74>
jsPost.put(GTaskStringUtils.GTASK_JSON_CLIENT_VERSION, mClientVersion);
// <20><><EFBFBD><EFBFBD>POST<53><54><EFBFBD>󣬲<EFBFBD><F3A3ACB2><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪJSONObject
JSONObject jsResponse = postRequest(jsPost);
// <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD>л<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>JSONArray<61><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return jsResponse.getJSONArray(GTaskStringUtils.GTASK_JSON_TASKS);
} catch (JSONException e) {
// <20><><EFBFBD>񲢼<EFBFBD>¼JSON<4F><4E><EFBFBD><EFBFBD><EFBFBD>
Log.e(TAG, e.toString());
e.printStackTrace();
throw new ActionFailureException("get task list: handing jsonobject failed");
}
}
/*
* <20><>ȡ<EFBFBD><C8A1>ǰͬ<C7B0><CDAC><EFBFBD><EFBFBD><EFBFBD>˻<EFBFBD><CBBB><EFBFBD>
* @return <20><>ǰͬ<C7B0><CDAC><EFBFBD><EFBFBD><EFBFBD>˻<EFBFBD><CBBB><EFBFBD><EFBFBD><EFBFBD>
*/
public Account getSyncAccount() {
return mAccount;
}
/*
* <20><><EFBFBD>ø<EFBFBD><C3B8>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
public void resetUpdateArray() {
mUpdateArray = null;
}
}