package net.londatiga.android.twitter; import java.net.URL; import java.util.List; import org.apache.http.NameValuePair; import org.json.JSONObject; import org.json.JSONTokener; import android.os.AsyncTask; import net.londatiga.android.twitter.oauth.OauthAccessToken; import net.londatiga.android.twitter.oauth.OauthConsumer; import net.londatiga.android.twitter.http.HttpConn; import net.londatiga.android.twitter.util.Cons; /** * Twitter API request. * * @author Lorensius W. L. T <lorenz@londatiga.net> * */ public class TwitterRequest { private OauthConsumer mConsumer; private OauthAccessToken mAccessToken; public TwitterRequest(OauthConsumer consumer, OauthAccessToken accessToken) { mConsumer = consumer; mAccessToken = accessToken; } public void createRequest(String method, String url, List<NameValuePair> params, RequestListener listener) { new RequestTask(method, url, params, listener).execute(); } public void verifyCredentials(VerifyCredentialListener listener) { new VerifyCredentialTask(listener).execute(); } private class RequestTask extends AsyncTask<URL, Integer, Long> { String method, url, response = ""; List<NameValuePair> params; RequestListener listener; public RequestTask(String method, String url, List<NameValuePair> params, RequestListener listener) { this.method = method; this.url = url; this.params = params; this.listener = listener; } protected void onCancelled() { } protected void onPreExecute() { } protected Long doInBackground(URL... urls) { long result = 0; try { HttpConn conn = new HttpConn(mConsumer, mAccessToken); if (method.equals(HttpConn.REQUEST_GET)) { response = conn.connectGet(url, params); } else { response = conn.connectPost(url, params); } } catch (Exception e) { e.printStackTrace(); } return result; } protected void onProgressUpdate(Integer... progress) { } protected void onPostExecute(Long result) { if (!response.equals("")) { listener.onSuccess(response); } else { listener.onError("Failed to process api request"); } } } private class VerifyCredentialTask extends AsyncTask<URL, Integer, Long> { String response = ""; VerifyCredentialListener listener; public VerifyCredentialTask(VerifyCredentialListener listener) { this.listener = listener; } protected void onCancelled() { } protected void onPreExecute() { } protected Long doInBackground(URL... urls) { long result = 0; try { HttpConn conn = new HttpConn(mConsumer, mAccessToken); response = conn.connectGet(Cons.API_VERIFY_CREDENTIAL_URL, null); } catch (Exception e) { e.printStackTrace(); } return result; } protected void onProgressUpdate(Integer... progress) { } protected void onPostExecute(Long result) { if (!response.equals("")) { try { JSONObject jsonObj = (JSONObject) new JSONTokener(response).nextValue(); TwitterUser user = new TwitterUser(); user.userId = jsonObj.getString("id"); user.screenName = jsonObj.getString("screen_name"); user.name = jsonObj.getString("name"); user.description = jsonObj.getString("description"); user.location = jsonObj.getString("location"); user.profileImageUrl = jsonObj.getString("profile_image_url"); user.website = jsonObj.getString("url"); user.followerCount = jsonObj.getInt("followers_count"); listener.onSuccess(user); } catch (Exception e) { listener.onError("Failed to get credentials"); } } else { listener.onError("Failed to get credentials"); } } } public interface RequestListener { public abstract void onSuccess(String response); public abstract void onError(String error); } public interface VerifyCredentialListener { public abstract void onSuccess(TwitterUser user); public abstract void onError(String error); } }