I have no idea what OAuth library I am using or how to find that out.
Here is my TwitterClient class:
package com.codepath.apps.mysimpletweets;
import android.content.Context;
import android.util.Log;
import com.codepath.oauth.OAuthBaseClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;
import org.scribe.builder.api.Api;
import org.scribe.builder.api.TwitterApi;
/*
*
* This is the object responsible for communicating with a REST API.
* Specify the constants below to change the API being communicated with.
* See a full list of supported API classes:
* https://github.com/fernandezpablo85/scribe-java/tree/master/src/main/java/org/scribe/builder/api
* Key and Secret are provided by the developer site for the given API i.e dev.twitter.com
* Add methods for each relevant endpoint in the API.
*
* NOTE: You may want to rename this object based on the service i.e TwitterClient or FlickrClient
*
*/
public class TwitterClient extends OAuthBaseClient {
public static final Class<? extends Api> REST_API_CLASS = TwitterApi.class; // Changed to use the Twitter APi
public static final String REST_URL = "https://api.twitter.com/1.1"; // Change this, base API URL
public static final String REST_CONSUMER_KEY = "**masked for privacy**"; // Changed
public static final String REST_CONSUMER_SECRET = "**masked for privacy**"; // Changed
public static final String REST_CALLBACK_URL = "oauth://cpsimpletweets"; // Changed this (here and in manifest)
public TwitterClient(Context context) {
super(context, REST_API_CLASS, REST_URL, REST_CONSUMER_KEY, REST_CONSUMER_SECRET, REST_CALLBACK_URL);
}
/* 1. Define the endpoint URL with getApiUrl and pass a relative path to the endpoint
* i.e getApiUrl("statuses/home_timeline.json");
* 2. Define the parameters to pass to the request (query or body)
* i.e RequestParams params = new RequestParams("foo", "bar");
* 3. Define the request method and make a call to the client
* i.e client.get(apiUrl, params, handler);
* i.e client.post(apiUrl, params, handler);
*/
/*
GET the tweets
Endpoint: Home timeline for the user
GET statuses/home_timeline
Full URL: https://api.twitter.com/1.1/statuses/home_timeline.json
params:
count=2
since_id=1
*/
public void getHomeTimeline(AsyncHttpResponseHandler handler) {
String apiurl = getApiUrl("statuses/home_timeline.json");
//specify the params
RequestParams params = new RequestParams();
params.put("count", 25);
params.put("since_id", 1);
//execute the request
getClient().get(apiurl, params, handler);
Log.d("DEBUG-URL", apiurl);
}
/*
POST a tweet
Endpoint: Compose a tweet for the user
Full URL: https://api.twitter.com/1.1/
params:
...
*/
}
Here is my TwitterApp class:
package com.codepath.apps.mysimpletweets;
import android.content.Context;
/*
* This is the Android application itself and is used to configure various settings
* including the image cache in memory and on disk. This also adds a singleton
* for accessing the relevant rest client.
*
* TwitterClient client = TwitterApp.getRestClient();
* // use client to send requests to API
*
*/
public class TwitterApp extends com.activeandroid.app.Application {
private static Context context;
@Override
public void onCreate() {
super.onCreate();
TwitterApp.context = this;
}
public static TwitterClient getRestClient() {
return (TwitterClient) TwitterClient.getInstance(TwitterClient.class, TwitterApp.context);
}
}
Here is my TimelineActivity class:
package com.codepath.apps.mysimpletweets;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import com.loopj.android.http.JsonHttpResponseHandler;
import org.json.JSONArray;
import org.json.JSONObject;
import cz.msebera.android.httpclient.Header;
public class TimelineActivity extends AppCompatActivity {
private TwitterClient client;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_timeline);
client = TwitterApp.getRestClient(); //singleton client
populateTimeline();
}
//Send an API request to get the timeline JSON
//Fill the ListView by creating the tweet objects from the JSON
private void populateTimeline() {
client.getHomeTimeline(new JsonHttpResponseHandler(){
// SUCCESS
@Override
public void onSuccess(int statusCode, Header[] headers, JSONArray json) {
Log.d("DEBUG-Success", json.toString());
}
// FAILURE
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
Log.d("DEBUG-Failure", errorResponse.toString());
}
});
}
}
Here is my LoginActivity class:
package com.codepath.apps.mysimpletweets;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import com.codepath.oauth.OAuthLoginActionBarActivity;
public class LoginActivity extends OAuthLoginActionBarActivity<TwitterClient> {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
}
// Inflate the menu; this adds items to the action bar if it is present.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.login, menu);
return true;
}
// OAuth authenticated successfully, launch primary authenticated activity
// i.e Display application "homepage"
@Override
public void onLoginSuccess() {
Intent i = new Intent(this, TimelineActivity.class);
startActivity(i);
//Toast.makeText(this, "Successfully logged in", Toast.LENGTH_SHORT).show();
}
// OAuth authentication flow failed, handle the error
// i.e Display an error dialog or toast
@Override
public void onLoginFailure(Exception e) {
e.printStackTrace();
}
// Click handler method for the button used to start OAuth flow
// Uses the client to initiate OAuth authorization
// This should be tied to a button used to login
public void loginToRest(View view) {
getClient().connect();
}
}