当前位置: 代码迷 >> Android >> Twitter V1.1在Android中的使用
  详细解决方案

Twitter V1.1在Android中的使用

热度:501   发布时间:2016-05-01 10:13:10.0
Twitter V1.1在Android中的应用

前面申请CONSUMER_KEY和CONSUMER_SECRET的过程就忽略了,这里直接上代码。

?

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.twitter_demo"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />    <uses-permission android:name="android.permission.INTERNET" />    <!-- Network State Permissions -->    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name="com.example.twitter_demo.MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>            <intent-filter>                <action android:name="android.intent.action.VIEW" />                <category android:name="android.intent.category.DEFAULT" />                <category android:name="android.intent.category.BROWSABLE" />                <data android:host="t4jsample" android:scheme="oauth" />            </intent-filter>        </activity>    </application></manifest>

?

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".TwitterHomeActivity" ><TextView    android:id="@+id/textView1"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_alignParentLeft="true"    android:layout_alignParentTop="true"    android:layout_marginLeft="106dp"    android:layout_marginTop="21dp"    android:text="@string/hello_world"    android:textColor="#A52A2A"    android:textStyle="bold"    android:typeface="serif" /><Button    android:id="@+id/button1"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_alignLeft="@+id/textView1"    android:layout_below="@+id/textView1"    android:layout_marginTop="80dp"    android:text="Login to twitter" /><EditText    android:id="@+id/editText1"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_centerHorizontal="true"    android:layout_centerVertical="true"    android:visibility="gone"    android:ems="10" /><Button    android:id="@+id/button2"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_below="@+id/editText1"    android:layout_centerHorizontal="true"    android:layout_marginTop="34dp"    android:visibility="gone"    android:text="Tweets" /></RelativeLayout>

?

AlertDialogManager.java

package com.example.twitter_demo;import android.app.AlertDialog;import android.content.Context;import android.content.DialogInterface;public class AlertDialogManager {	public void showAlertDialog(Context context, String title, String message,			Boolean status) {		AlertDialog alertDialog = new AlertDialog.Builder(context).create();		// Setting Dialog Title		alertDialog.setTitle(title);		// Setting Dialog Message		alertDialog.setMessage(message);		if (status != null)			// Setting alert dialog icon			// alertDialog.setIcon((status) ? R.drawable.success :			// R.drawable.fail);			// Setting OK Button			alertDialog.setButton("OK", new DialogInterface.OnClickListener() {				public void onClick(DialogInterface dialog, int which) {				}			});		// Showing Alert Message		alertDialog.show();	}}

?

ConnectionDetector.java

package com.example.twitter_demo;import android.content.Context;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.util.Log;public class ConnectionDetector {	private Context _context;	public ConnectionDetector(Context context) {		this._context = context;	}	public boolean isConnectingToInternet() {		ConnectivityManager connectivity = (ConnectivityManager) _context				.getSystemService(Context.CONNECTIVITY_SERVICE);		if (connectivity != null) {			NetworkInfo[] info = connectivity.getAllNetworkInfo();			if (info != null)				for (int i = 0; i < info.length; i++)					if (info[i].getState() == NetworkInfo.State.CONNECTED) {						Log.d("Network",								"NETWORKnAME: " + info[i].getTypeName());						return true;					}		}		return false;	}}

?

MainActivity.java

package com.example.twitter_demo;import twitter4j.Twitter;import twitter4j.TwitterException;import twitter4j.TwitterFactory;import twitter4j.User;import twitter4j.auth.AccessToken;import twitter4j.auth.RequestToken;import twitter4j.conf.Configuration;import twitter4j.conf.ConfigurationBuilder;import android.net.Uri;import android.os.AsyncTask;import android.os.Bundle;import android.app.Activity;import android.app.ProgressDialog;import android.content.Intent;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.content.pm.ActivityInfo;import android.text.Html;import android.util.Log;import android.view.Menu;import android.view.View;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity {	static String TWITTER_CONSUMER_KEY = "gWuDKEHVD4Ito3TKNaexmg";	static String TWITTER_CONSUMER_SECRET = "0DYm4kSSOnZ0iYmUojJPZOs0KppYivN9jiVnkba574";	static String PREFERENCE_NAME = "twitter_oauth";	static final String PREF_KEY_OAUTH_TOKEN = "oauth_token";	static final String PREF_KEY_OAUTH_SECRET = "oauth_token_secret";	static final String PREF_KEY_TWITTER_LOGIN = "isTwitterLogedIn";	static final String TWITTER_CALLBACK_URL = "oauth://t4jsample";	static final String URL_TWITTER_AUTH = "auth_url";	static final String URL_TWITTER_OAUTH_VERIFIER = "oauth_verifier";	static final String URL_TWITTER_OAUTH_TOKEN = "oauth_token";	ProgressDialog pDialog;	private static Twitter twitter;	private static RequestToken requestToken;	private static SharedPreferences mSharedPreferences;	private ConnectionDetector cd;	AlertDialogManager alert = new AlertDialogManager();	EditText sts;	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);		setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);		cd = new ConnectionDetector(getApplicationContext());		if (!cd.isConnectingToInternet()) {			alert.showAlertDialog(MainActivity.this,					"Internet Connection Error",					"Please connect to working Internet connection", false);			return;		}		// Check if twitter keys are set		if (TWITTER_CONSUMER_KEY.trim().length() == 0				|| TWITTER_CONSUMER_SECRET.trim().length() == 0) {			alert.showAlertDialog(MainActivity.this, "Twitter oAuth tokens",					"Please set your twitter oauth tokens first!", false);			return;		}		mSharedPreferences = getApplicationContext().getSharedPreferences(				"MyPref", 0);		findViewById(R.id.button1).setOnClickListener(				new View.OnClickListener() {					@Override					public void onClick(View v) {						loginToTwitter();					}				});		findViewById(R.id.button2).setOnClickListener(				new View.OnClickListener() {					@Override					public void onClick(View v) {						sts = (EditText) findViewById(R.id.editText1);						String status = sts.getText().toString();						if (status.trim().length() > 0) {							new updateTwitterStatus().execute(status);						} else {							Toast.makeText(getApplicationContext(),									"Please enter status message",									Toast.LENGTH_SHORT).show();						}					}				});		if (!isTwitterLoggedInAlready()) {			Uri uri = getIntent().getData();			if (uri != null && uri.toString().startsWith(TWITTER_CALLBACK_URL)) {				if (pDialog == null) {					pDialog = new ProgressDialog(MainActivity.this);				}				pDialog.setMessage("Access Tiwtter...");				pDialog.show();				new AccessTwitter().execute(uri);			}		} else {			findViewById(R.id.button1).setVisibility(View.GONE);			findViewById(R.id.editText1).setVisibility(View.VISIBLE);			findViewById(R.id.button2).setVisibility(View.VISIBLE);		}	}	private ProgressDialog getProgressDialog() {		ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);		progressDialog.setTitle("login...");		progressDialog.setMessage("please wait...");		return progressDialog;	}	@Override	public boolean onCreateOptionsMenu(Menu menu) {		// Inflate the menu; this adds items to the action bar if it is present.		return true;	}	private void loginToTwitter() {		if (!isTwitterLoggedInAlready()) {			ConfigurationBuilder builder = new ConfigurationBuilder();			builder.setOAuthConsumerKey(TWITTER_CONSUMER_KEY);			builder.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET);			Configuration configuration = builder.build();			TwitterFactory factory = new TwitterFactory(configuration);			twitter = factory.getInstance();			new RequestTwitter().execute();		} else {			Toast.makeText(getApplicationContext(),					"Already Logged into twitter", Toast.LENGTH_LONG).show();		}	}	private class RequestTwitter extends AsyncTask<String, String, String> {		@Override		protected String doInBackground(String... params) {			try {				requestToken = twitter						.getOAuthRequestToken(TWITTER_CALLBACK_URL);			} catch (TwitterException e) {				e.printStackTrace();			}			return null;		}		@Override		protected void onPostExecute(String result) {			if (requestToken != null) {				Intent intent = new Intent(Intent.ACTION_VIEW,						Uri.parse(requestToken.getAuthenticationURL()));				intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);				intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);				MainActivity.this.startActivity(intent);			} else {				Log.e("TAG", "requstToken error");			}			super.onPostExecute(result);		}	}	private class AccessTwitter extends AsyncTask<Uri, String, Boolean> {		@Override		protected Boolean doInBackground(Uri... params) {			Uri uri = params[0];			if (uri != null && uri.toString().startsWith(TWITTER_CALLBACK_URL)) {				String verifier = uri						.getQueryParameter(URL_TWITTER_OAUTH_VERIFIER);				try {					AccessToken accessToken = twitter.getOAuthAccessToken(							requestToken, verifier);					// Shared Preferences					Editor e = mSharedPreferences.edit();					e.putString(PREF_KEY_OAUTH_TOKEN, accessToken.getToken());					e.putString(PREF_KEY_OAUTH_SECRET,							accessToken.getTokenSecret());					e.putBoolean(PREF_KEY_TWITTER_LOGIN, true);					e.commit();					Log.e("Twitter OAuth Token", "> " + accessToken.getToken());					long userID = accessToken.getUserId();					User user = twitter.showUser(userID);					String username = user.getName();					Log.e("UserID: ", "userID: " + userID + "" + username);					Log.v("Welcome:",							"Thanks:"									+ Html.fromHtml("<b>Welcome " + username											+ "</b>"));					return true;				} catch (Exception e) {					Log.e("Twitter Login Error", "> " + e.getMessage(), e);				}			}			return false;		}		@Override		protected void onPostExecute(Boolean result) {			pDialog.dismiss();			if (result) {				findViewById(R.id.button1).setVisibility(View.GONE);				findViewById(R.id.editText1).setVisibility(View.VISIBLE);				findViewById(R.id.button2).setVisibility(View.VISIBLE);			} else {				Log.e("TAG", "accessToken error");			}			super.onPostExecute(result);		}	}	private boolean isTwitterLoggedInAlready() {		return mSharedPreferences.getBoolean(PREF_KEY_TWITTER_LOGIN, false);	}	class updateTwitterStatus extends AsyncTask<String, String, String> {		@Override		protected void onPreExecute() {			super.onPreExecute();			if (pDialog == null) {				pDialog = new ProgressDialog(MainActivity.this);			}			pDialog.setMessage("Updating to twitter...");			pDialog.setIndeterminate(false);			pDialog.setCancelable(false);			pDialog.show();		}		protected String doInBackground(String... args) {			Log.d("Tweet Text", "> " + args[0]);			String status = args[0];			try {				ConfigurationBuilder builder = new ConfigurationBuilder();				builder.setOAuthConsumerKey(TWITTER_CONSUMER_KEY);				builder.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET);				// Access Token				String access_token = mSharedPreferences.getString(						PREF_KEY_OAUTH_TOKEN, "");				// Access Token Secret				String access_token_secret = mSharedPreferences.getString(						PREF_KEY_OAUTH_SECRET, "");				AccessToken accessToken = new AccessToken(access_token,						access_token_secret);				Twitter twitter = new TwitterFactory(builder.build())						.getInstance(accessToken);				// Update status				twitter4j.Status response = twitter.updateStatus(status);				Log.d("Status", "> " + response.getText());			} catch (TwitterException e) {				// Error in updating status				Log.d("Twitter Update Error", e.getMessage());			}			return null;		}		protected void onPostExecute(String file_url) {			// dismiss the dialog after getting all products			pDialog.dismiss();			// updating UI from Background Thread			runOnUiThread(new Runnable() {				@Override				public void run() {					Toast.makeText(getApplicationContext(),							"Status tweeted successfully", Toast.LENGTH_SHORT)							.show();					// Clearing EditText field					sts.setText("");				}			});		}	}}

?

  相关解决方案