1. Code
  2. Mobile Development
  3. Android Development

Erstellen eines Twitter-Clients für Android: Tweeten, Retweeten und Antworten

In dieser Serie erstellen wir einen Twitter-Client für die Android-Plattform unter Verwendung der Twitter4J-Bibliothek. Dieses Tutorial konzentriert sich auf das Implementieren von Tweeten, Retweeten und Antworten auf Tweets. Wir werden eine neue Aktivität zum Twittern und Antworten erstellen, mit Retweet- und Antwortschaltflächen, die für jeden Tweet in der Home-Timeline des Benutzers implementiert sind.
Scroll to top

German (Deutsch) translation by Federicco Ancie (you can also view the original English article)

In dieser Serie erstellen wir einen Twitter-Client für die Android-Plattform unter Verwendung der Twitter4J-Bibliothek. Dieses Tutorial konzentriert sich auf das Implementieren von Tweeten, Retweeten und Antworten auf Tweets. Wir werden eine neue Aktivität zum Twittern und Antworten erstellen, mit Retweet- und Antwortschaltflächen, die für jeden Tweet in der Home-Timeline des Benutzers implementiert sind.


Auch in dieser Serie erhältlich:

  1. Erstellen eines Twitter-Clients für Android: Setup & Übersicht
  2. Erstellen eines Twitter-Clients für Android: Erstellen der Benutzeroberfläche
  3. Erstellen eines Twitter-Clients für Android: Erstellen einer Timeline-Datenbank
  4. Erstellen eines Twitter-Clients für Android: Abrufen von Updates mithilfe eines Dienstes
  5. Erstellen eines Twitter-Clients für Android: Tweeten, Retweeten und Antworten

In den ersten vier Tutorials haben wir:

  • Registrierte die App bei Twitter.
  • Importierte die Twitter4J-Bibliothek.
  • Behandelte Benutzerauthentifizierung.
  • Die Benutzeroberfläche wurde mithilfe von XML-Ressourcen erstellt.
  • Erstellt eine SQLite-Datenbank zum Speichern der Tweets für die Home-Timeline des Benutzers.
  • Ordnete die Daten mithilfe eines Adapters den sichtbaren Ansichten zu.
  • Abrufen neuer Updates in regelmäßigen Abständen mithilfe eines Dienstes und einer Übertragung.

Schritt 1: Erstellen Sie eine Tweet-Aktivität

Unsere App wird zusätzlich zum Hauptbildschirm der Timeline eine zweite Aktivität haben. Diese neue Aktivität dient zum Senden von Tweets. Darin kann der Benutzer Text eingeben, um einen Tweet von seinem Twitter-Konto aus zu senden. Der Benutzer kann die Tweet-Aktivität auf zwei Arten eingeben: durch Drücken der Tweet-Taste auf dem Hauptbildschirm der App oder durch Drücken einer Antworttaste in der Zeitleiste.


Wenn der Benutzer die Tweet-Taste drückt, wird ihm ein leeres Textfeld zur Eingabe seines Tweets angezeigt. Zum Senden wird eine Schaltfläche zum Senden verwendet.


Wenn der Benutzer die Antwortschaltfläche innerhalb eines Timeline-Tweets drückt, wird ihm auch das Textfeld angezeigt, aber der Benutzername für die Antwort wird bereits in das Feld eingetragen. Die Antwort muss auch mit der ID des Tweets gesendet werden, auf den geantwortet wird, was wir ebenfalls implementieren werden.

Erstellen Sie eine neue Klasse in Ihrem Android-Projekt und nennen Sie sie "NiceTweet", damit sie mit de Namen übereinstimmt, den Sie im ersten Lernprogramm in Ihre Manifest-Datei aufgenommen haben. Ändern Sie die Klassendeklaration wie folgt:

1
 
2
public class NiceTweet extends Activity implements OnClickListener {

Sie benötigen die folgenden Android-Importe:

1
 
2
import android.app.Activity; 
3
import android.content.SharedPreferences; 
4
import android.os.Bundle; 
5
import android.util.Log; 
6
import android.view.View; 
7
import android.view.View.OnClickListener; 
8
import android.widget.Button; 
9
import android.widget.EditText; 
10
import android.widget.LinearLayout;

Plus diese Twitter4J-Importe:

1
 
2
import twitter4j.StatusUpdate; 
3
import twitter4j.Twitter; 
4
import twitter4j.TwitterException; 
5
import twitter4j.TwitterFactory; 
6
import twitter4j.conf.Configuration; 
7
import twitter4j.conf.ConfigurationBuilder;

Nehmen Sie die folgenden Instanzvariablen in Ihre Klassendeklaration auf:

1
 
2
	/**shared preferences for user twitter details*/ 
3
private SharedPreferences tweetPrefs; 
4
	/**twitter object**/ 
5
private Twitter tweetTwitter; 
6
 
7
	/**twitter key*/ 
8
public final static String TWIT_KEY = "your key"; 
9
	/**twitter secret*/ 
10
public final static String TWIT_SECRET = "your secret"; 
11
 
12
	/**the update ID for this tweet if it is a reply*/ 
13
private long tweetID = 0; 
14
	/**the username for the tweet if it is a reply*/ 
15
private String tweetName = "";

Wir werden die Variablen "Einstellungen", "Twitter", "Schlüssel" und "Geheime" verwenden, um über das Benutzerkonto auf die Twitter4J-Methoden zum Twittern zuzugreifen. Ändern Sie den Schlüssel und das Geheimnis nach Ihren Wünschen. Die letzten beiden Variablen sind für Antworten. Wenn der Benutzer die Antwortschaltfläche innerhalb eines Tweets drückt, geben wir die ID des Tweets, auf den geantwortet wird, zusammen mit dem Twitter-Bildschirmnamen des Kontos weiter, auf das wir antworten. Wir werden diese in den beiden Instanzvariablen speichern.

Implementieren wir die Aktivitätserstellungsmethode:

1
 
2
/* 

3
 * onCreate called when activity is created 

4
 */ 
5
@Override 
6
public void onCreate(Bundle savedInstanceState) { 
7
	super.onCreate(savedInstanceState); 
8
		//set tweet layout 

9
	setContentView(R.layout.tweet);   
10
}

Alles, was wir hier tun, ist das Tweet-Layout festzulegen, das wir zuvor in XML definiert haben. Implementieren Sie als Nächstes die Wiederaufnahme-Methode, die aufgerufen wird, wenn die Aktivität für den Benutzer sichtbar wird:

1
 
2
/* 

3
 * Call setup method when this activity starts 

4
 */ 
5
@Override 
6
public void onResume() { 
7
	super.onResume(); 
8
		//call helper method 

9
	setupTweet(); 
10
}

Wir werden die angegebene Hilfsmethode bereitstellen, um die Aktivität für die Benutzerinteraktion einzurichten.


Schritt 2: Bereiten Sie sich auf Tweet vor

Fügen Sie Ihrer Klasse die Methode "setupTweet" wie folgt hinzu:

1
 
2
/** 

3
 * Method called whenever this Activity starts 

4
 * - get ready to tweet 

5
 * Sets up twitter and onClick listeners 

6
 * - also sets up for replies 

7
 */ 
8
private void setupTweet() { 
9
	//prepare to tweet 

10
 
11
}

Innerhalb dieser Methode müssen wir die Klasse so vorbereiten, dass sowohl normale Tweets als auch Antworten gesendet werden. Verwenden wir zunächst die freigegebenen Einstellungen, um unser Twitter-Objekt zu instanziieren:

1
 
2
	//get preferences for user twitter details 

3
tweetPrefs = getSharedPreferences("TwitNicePrefs", 0); 
4
         
5
       	//get user token and secret for authentication 

6
String userToken = tweetPrefs.getString("user_token", null); 
7
String userSecret = tweetPrefs.getString("user_secret", null); 
8
 
9
	//create a new twitter configuration usign user details 

10
Configuration twitConf = new ConfigurationBuilder() 
11
	.setOAuthConsumerKey(TWIT_KEY) 
12
	.setOAuthConsumerSecret(TWIT_SECRET) 
13
	.setOAuthAccessToken(userToken) 
14
	.setOAuthAccessTokenSecret(userSecret) 
15
	.build(); 
16
 
17
	//create a twitter instance 

18
tweetTwitter = new TwitterFactory(twitConf).getInstance();

Hier erstellen wir ein Twitter-Objekt unter Verwendung der Authentifizierungsinformationen des Benutzers zusammen mit dem Entwicklerschlüssel und dem Geheimnis für die Anwendung. Wenn wir Benutzer zu dieser Aktivitätsklasse führen, geben wir die ID und den Benutzernamen weiter, wenn auf einen Tweet geantwortet wird. Wir bekommen diese aus der Absicht:

1
 
2
	//get any data passed to this intent for a reply 

3
Bundle extras = getIntent().getExtras();

Wenn es sich bei dem Tweet eher um ein gewöhnliches Update als um eine Antwort handelt, gibt es keine Extras. Wenn es Extras gibt, wissen wir, dass der Tweet eine Antwort ist:

1
 
2
if(extras !=null) 
3
{ 
4
		//get the ID of the tweet we are replying to 

5
	tweetID = extras.getLong("tweetID"); 
6
		//get the user screen name for the tweet we are replying to 

7
	tweetName = extras.getString("tweetUser"); 
8
 
9
		//use the passed information 

10
 
11
}

Hier rufen wir die ID und den Bildschirmnamen ab, auf die der Tweet antworten soll. Als nächstes verwenden wir diese Informationen, um den Benutzernamen zum Textfeld hinzuzufügen, das sich noch in der "if" -Anweisung befindet:

1
 
2
	//get a reference to the text field for tweeting 

3
EditText theReply = (EditText)findViewById(R.id.tweettext); 
4
	//start the tweet text for the reply @username 

5
theReply.setText("@"+tweetName+" "); 
6
	//set the cursor to the end of the text for entry 

7
theReply.setSelection(theReply.getText().length());

Wir setzen den Benutzernamen als ersten Teil des Tweet-Textes und platzieren den Cursor am Ende, damit der Benutzer seinen Antworttext sofort eingeben kann.


Als nächstes kümmern wir uns um Fälle, in denen der Tweet keine Antwort ist:

1
 
2
else  
3
{ 
4
    	EditText theReply = (EditText)findViewById(R.id.tweettext); 
5
    	theReply.setText(""); 
6
}

Hier setzen wir den Text einfach auf einen leeren String, wieder unter Verwendung der ID, die wir dem Textfeld im Layout-XML gegeben haben. Jetzt können wir die "setupTweet" -Methode beenden, indem wir Klick-Listener für die Schaltfläche "Senden" und die Schaltfläche "Home" hinzufügen, um zum Hauptbildschirm der Zeitleiste zurückzukehren:

1
 
2
	//set up listener for choosing home button to go to timeline 

3
LinearLayout tweetClicker = (LinearLayout)findViewById(R.id.homebtn); 
4
tweetClicker.setOnClickListener(this); 
5
         
6
	//set up listener for send tweet button 

7
Button tweetButton = (Button)findViewById(R.id.dotweet); 
8
tweetButton.setOnClickListener(this);

Wir verwenden wieder die ID-Werte, die wir in unseren Layoutdateien angegeben haben.


Schritt 3: Klicks erkennen

Denken Sie daran, dass die Tweet-Aktivität eine Schaltfläche zum Zurückkehren der Benutzer zur Home-Timeline sowie die Schaltfläche zum Senden des Tweets enthalten wird. Fügen wir nun die "onClick" -Methode hinzu, um Benutzer zu behandeln, die auf diese Schaltflächen klicken:

1
 
2
/** 

3
 * Listener method for button clicks 

4
 * - for home button and send tweet button 

5
 */ 
6
public void onClick(View v) { 
7
	//handle home and send button clicks 

8
 
9
}

Holen Sie sich zuerst einen Verweis auf das Textfeld:

1
 
2
EditText tweetTxt = (EditText)findViewById(R.id.tweettext);

Jetzt müssen wir mithilfe von switch- und case-Anweisungen herausfinden, auf welche Schaltfläche geklickt wurde:

1
 
2
	//find out which view has been clicked 

3
switch(v.getId()) { 
4
case R.id.dotweet: 
5
	//send tweet 

6
	 
7
	break; 
8
case R.id.homebtn: 
9
	//go to the home timeline 

10
 
11
	break; 
12
default: 
13
	break; 
14
}

Implementieren Sie in der case-Anweisung "dotweet" vor der break-Anweisung das Senden eines Tweets wie folgt:

1
 
2
String toTweet = tweetTxt.getText().toString(); 
3
try { 
4
		//handle replies 

5
	if(tweetName.length()>0) 
6
		tweetTwitter.updateStatus(new StatusUpdate(toTweet).inReplyToStatusId(tweetID)); 
7
		 
8
		//handle normal tweets 

9
	else  
10
		tweetTwitter.updateStatus(toTweet); 
11
			 
12
		//reset the edit text 

13
	tweetTxt.setText(""); 
14
} 
15
catch(TwitterException te) { Log.e("NiceTweet", te.getMessage()); }

Hier prüfen wir, ob der Tweet eine Antwort ist oder nicht. Die "if" -Anweisung wird ausgeführt, wenn der Tweet eine Antwort ist, einschließlich des Textes aus dem Textfeld und der ID der Statusaktualisierung, auf die wir antworten. Die Anweisung "else" sorgt für das Senden gewöhnlicher Tweets, in denen nur der Text als Parameter übergeben wird. Die Try-and-Catch-Blöcke sind erforderlich, da wir versuchen, über das Netzwerk eine Verbindung zu Twitter herzustellen. Nach dem Senden des Tweets, unabhängig davon, ob es sich um eine Antwort handelt oder nicht, setzen wir das Textfeld zur Vorbereitung auf das nächste Tweet-Update wieder auf leer.

Setzen Sie für die case-Anweisung "homebtn" einfach das Textfeld auf einen leeren String:

1
 
2
tweetTxt.setText("");

Beenden Sie die Aktivität nach der switch-Anweisung, die sich jedoch noch in der "onClick" -Methode befindet, so, dass sie zur Home-Timeline zurückkehrt:

1
 
2
finish();

Unabhängig davon, ob es sich bei dem Tweet um eine Antwort oder ein gewöhnliches Update handelt, kehren wir beim Senden des Benutzers sofort zum Hauptbildschirm zurück. Dies geschieht auch, wenn er die Home-Taste drückt. Die Finish-Anweisung wird in allen drei Fällen ausgeführt.


Schritt 4: Modellieren Sie Tweet-Daten für Retweets und Antworten

Um das Retweeten und Antworten zu implementieren, müssen wir die Tweet-ID und den Benutzernamen in den Retweet- und Antwortschaltflächen für jeden Tweet in der Timeline speichern. Durch Speichern dieser Daten in der Schaltfläche Ansichten für Retweet und Antwort können wir erkennen, welcher Tweet retweetet oder beantwortet wird, wenn der Benutzer eine Schaltfläche drückt.

Da die Informationen, die wir speichern müssen, eine Zahl und Text enthalten, erstellen wir eine Klasse, um sie zu modellieren. Erstellen Sie eine neue Klasse in Ihrem Projekt und nennen Sie sie "StatusData". Ihre neue Klasse sollte wie folgt beginnen:

1
 
2
public class StatusData {

Fügen Sie innerhalb der Klasse Instanzvariablen für die Tweet-ID und den Benutzernamen hinzu:

1
 
2
/**tweet ID*/ 
3
private long tweetID; 
4
 
5
/**user screen name of tweeter*/ 
6
private String tweetUser;

Die ID wird als Long modelliert, wobei der Bildschirmname eine Textzeichenfolge ist. Fügen Sie der Klasse eine Konstruktormethode hinzu:

1
 
2
/** 

3
 * Constructor receives ID and user name 

4
 * @param ID 

5
 * @param screenName 

6
 */ 
7
public StatusData(long ID, String screenName) { 
8
		//instantiate variables 

9
	tweetID=ID; 
10
	tweetUser=screenName; 
11
}

Die Methode instanziiert einfach die beiden Variablen. Fügen Sie als Nächstes eine öffentliche Methode hinzu, damit wir die Tweet-ID an anderer Stelle abrufen können:

1
 
2
/** 

3
 * Get the ID of the tweet 

4
 * @return tweetID as a long 

5
 */ 
6
public long getID() {return tweetID;}

Fügen Sie dann eine Methode hinzu, um den Bildschirmnamen zurückzugeben:

1
 
2
/** 

3
 * Get the user screen name for the tweet 

4
 * @return tweetUser as a String 

5
 */ 
6
public String getUser() {return tweetUser;}

Mit diesen Methoden können wir diese Informationen abrufen, wenn Benutzer auf die Schaltfläche "Retweet" oder "Antworten" für einen bestimmten Tweet klicken.


Schritt 5: Erweitern Sie die Bindung für Retweets und Antworten

Jetzt müssen wir den Code in der von uns erstellten Adapterklasse ("UpdateAdapter") erweitern. Bei der Methode "bindView" haben wir die Zuordnung von Daten zu den Ansichten der Benutzeroberfläche angepasst. Jetzt werden wir die weitere Verarbeitung hinzufügen, um die Tweet-Daten in jeden Retweet- und Antwort-Button aufzunehmen. Beginnen Sie vor dem Ende Ihrer "bindView" -Methode wie folgt:

1
 
2
	//get the status ID 

3
long statusID = cursor.getLong(cursor.getColumnIndex(BaseColumns._ID)); 
4
	//get the user name 

5
String statusName = cursor.getString(cursor.getColumnIndex("user_screen"));

Denken Sie daran, dass der Methode "bindView" ein Cursor-Objekt zum Durchlaufen der Daten übergeben wird. Hier verwenden wir den Cursor, um den langen ID-Wert und den String-Benutzernamen für den aktuellen Tweet abzurufen. Sie benötigen den folgenden zusätzlichen Import:

1
 
2
import android.provider.BaseColumns;

Jetzt instanziieren wir ein Objekt unserer neuen StatusData-Klasse und übergeben die Tweet-Daten an die Konstruktormethode:

1
 
2
	//create a StatusData object to store these 

3
StatusData tweetData = new StatusData(statusID, statusName);

Das StatusData-Objekt enthält alles, was zum Senden eines Retweets oder einer Antwort auf den betreffenden Tweet erforderlich ist. Wir werden nun einen Verweis auf dieses Objekt in den Retweet- und Antwortschaltflächen für den Tweet anhängen, damit wir nach Benutzerklicks auf die Informationen zugreifen können. Wir verwenden die "setTag" -Methode:

1
 
2
	//set the status data object as tag for both retweet and reply buttons in this view 

3
row.findViewById(R.id.retweet).setTag(tweetData); 
4
row.findViewById(R.id.reply).setTag(tweetData);

Die Methode "bindView" empfängt auch einen Parameter, der die Zeilenansicht darstellt, in der der Tweet angezeigt werden soll. Wenn Sie auf die aktualisierte XML-Layoutdatei zurückblicken, werden Sie feststellen, dass diese beiden ID-Werte für die Schaltflächen enthalten sind. Wir setzen das Tag in jeder Schaltfläche so, dass es das StatusData-Objekt widerspiegelt, das die ID und den Benutzernamen für den angezeigten Tweet enthält. Jetzt müssen wir Tastenklicks für diese einrichten:

1
 
2
	//setup onclick listeners for the retweet and reply buttons 

3
row.findViewById(R.id.retweet).setOnClickListener(tweetListener); 
4
row.findViewById(R.id.reply).setOnClickListener(tweetListener);

Hier geben wir einen Klick-Listener an, um Schaltflächenklicks zu verarbeiten. Innerhalb der Listener-Methode können wir die StatusData-Objekte aller angeklickten Retweet- und Antwortschaltflächen abrufen. Wir werden Benutzern auch erlauben, auf den Benutzernamen für einen Tweet zu klicken, um das Benutzerprofil im Webbrowser zu öffnen. Fügen Sie dieser Ansicht auch hier einen Klick-Listener hinzu:

1
 
2
	//setup  onclick for the user screen name within the tweet 

3
row.findViewById(R.id.userScreen).setOnClickListener(tweetListener);

Auf diese Weise können wir eine Verknüpfung zur Twitter-Weboberfläche herstellen, sodass Benutzer auf Funktionen zugreifen können, die wir nicht in der App selbst bereitgestellt haben.


Schritt 6: Klicken auf Schaltfläche und Benutzername verarbeiten

Erstellen Sie in Ihrer UpdateAdapter-Klasse einen "onClickListener", um Klicks zu verarbeiten, und verwenden Sie den Namen "tweetListener", um den Angaben in der Methode "bindView" zu entsprechen:

1
 
2
/** 

3
 * tweetListener handles clicks of reply and retweet buttons 

4
 * - also handles clicking the user name within a tweet 

5
 */ 
6
private OnClickListener tweetListener = new OnClickListener() { 
7
	//onClick method 

8
	public void onClick(View v) { 
9
 
10
	} 
11
};

Fügen Sie der Adapterklasse die folgenden zusätzlichen Importe hinzu:

1
 
2
import android.view.View.OnClickListener; 
3
import android.content.Intent; 
4
import android.content.SharedPreferences; 
5
import android.widget.Toast; 
6
import android.net.Uri; 
7
import twitter4j.Twitter; 
8
import twitter4j.TwitterException; 
9
import twitter4j.TwitterFactory; 
10
import twitter4j.conf.Configuration; 
11
import twitter4j.conf.ConfigurationBuilder;

Innerhalb der "onClick" -Methode implementieren wir Klicks auf beide Schaltflächen plus den Benutzernamen. Fügen Sie eine switch-Anweisung hinzu, um festzustellen, auf welche geklickt wurde:

1
 
2
//which view was clicked 

3
switch(v.getId()) { 
4
		//reply button pressed 

5
	case R.id.reply: 
6
		//implement reply 

7
 
8
		break; 
9
		//retweet button pressed 

10
	case R.id.retweet: 
11
		//implement retweet 

12
 
13
		break; 
14
		//user has pressed tweet user name 

15
	case R.id.userScreen: 
16
		//implement visiting user profile 

17
 
18
		break; 
19
	default: 
20
		break; 
21
}

In der Antwortfallanweisung starten wir die Tweet-Aktivitätsklasse und übergeben die Antwortdaten, damit die Antwort-ID und der Benutzername beim Senden des Tweets enthalten sein können:

1
 
2
	//create an intent for sending a new tweet 

3
Intent replyIntent = new Intent(v.getContext(), NiceTweet.class); 
4
	//get the data from the tag within the button view 

5
StatusData theData = (StatusData)v.getTag(); 
6
	//pass the status ID 

7
replyIntent.putExtra("tweetID", theData.getID()); 
8
	//pass the user name 

9
replyIntent.putExtra("tweetUser", theData.getUser()); 
10
	//go to the tweet screen 

11
v.getContext().startActivity(replyIntent);

Beachten Sie, dass wir das Tag für die gedrückte Ansicht abrufen und es als StatusData-Objekt umwandeln. Anschließend rufen wir die öffentlichen Methoden auf, die wir in der StatusData-Klasse bereitgestellt haben, um die Tweet-ID und den Bildschirmnamen des Benutzers zurückzugeben. Wir übergeben diese als Extras an die Tweet-Aktivität und starten dann die Aktivität. An diesem Punkt wird der Benutzer zum Tweet-Bildschirm weitergeleitet, wo die Antwortdaten verwendet werden, um die Antwort auf den richtigen Tweet zu implementieren.


In der Retweet-Case-Anweisung werden wir den relevanten Tweet direkt mit den Twitter4J-Methoden retweeten. Instanziieren Sie zuerst ein Twitter-Objekt mithilfe der freigegebenen Einstellungen sowie Ihres Entwicklerschlüssels und des Geheimnisses für die App:

1
 
2
	//get context 

3
Context appCont = v.getContext(); 
4
	//get preferences for user access 

5
SharedPreferences tweetPrefs = appCont.getSharedPreferences("TwitNicePrefs", 0); 
6
String userToken = tweetPrefs.getString("user_token", null); 
7
String userSecret = tweetPrefs.getString("user_secret", null); 
8
 
9
	//create new Twitter configuration 

10
Configuration twitConf = new ConfigurationBuilder() 
11
	.setOAuthConsumerKey(TWIT_KEY) 
12
	.setOAuthConsumerSecret(TWIT_SECRET) 
13
	.setOAuthAccessToken(userToken) 
14
	.setOAuthAccessTokenSecret(userSecret) 
15
	.build(); 
16
 
17
	//create Twitter instance for retweeting 

18
Twitter retweetTwitter = new TwitterFactory(twitConf).getInstance();

Dies ist die gleiche Technik, mit der wir zuvor die Twitter-Klasse instanziiert haben. Wir können jetzt das Twitter-Objekt verwenden, um den Retweet zu senden. Zuerst müssen wir das StatusData-Objekt von der Schaltfläche abrufen, auf die geklickt wurde:

1
 
2
	//get tweet data from view tag 

3
StatusData tweetData = (StatusData)v.getTag();

Jetzt können wir versuchen, das Update in einem Try-Block erneut zu twittern:

1
 
2
try  
3
{ 
4
		//retweet, passing the status ID from the tag 

5
	retweetTwitter.retweetStatus(tweetData.getID()); 
6
 
7
} 
8
catch(TwitterException te) {Log.e(LOG_TAG, te.getMessage());}

Alles, was das Twitter-Objekt zum Senden eines Retweets benötigt, ist die ID des ursprünglichen Tweets. Lassen Sie uns dem Benutzer jedoch bestätigen, dass sein Retweet gesendet wurde, immer noch im Try-Block:

1
 
2
	//confirm to use 

3
CharSequence text = "Retweeted!"; 
4
int duration = Toast.LENGTH_SHORT; 
5
Toast toast = Toast.makeText(appCont, text, duration); 
6
toast.show();

Sie können die Nachricht natürlich ändern, wenn Sie möchten. So sieht es aus:


Erlauben Sie dem Benutzer nun, eine Twitter-Profilseite im Webbrowser zu besuchen, indem Sie auf den Bildschirmnamen im aktuellen Tweet in der case-Anweisung "userScreen" klicken:

1
 
2
	//get the user screen name 

3
TextView tv = (TextView)v.findViewById(R.id.userScreen); 
4
String userScreenName = tv.getText().toString(); 
5
	//open the user's profile page in the browser 

6
Intent browserIntent = new Intent(Intent.ACTION_VIEW,  
7
	Uri.parse("https://twitter.com/"+userScreenName)); 
8
v.getContext().startActivity(browserIntent);

Hier rufen wir den Benutzernamen als Textzeichenfolge aus der Ansicht selbst ab, die den Bildschirmnamen ohnehin als Zeichenfolge anzeigt. Wir bauen dies in eine Twitter-Profilseitenadresse ein, analysieren sie als URI und weisen den Browser an, sie zu öffnen.


Schritt 7: Implementieren Sie den Umzug von zu Hause nach Tweet

Denken Sie daran, dass in unserer Haupt-App-Aktivität eine Schaltfläche angezeigt wird, mit der Benutzer direkt zum Tweet-Bildschirm gelangen. Lassen Sie uns das jetzt implementieren. Fügen Sie in Ihrer Hauptaktivitätsklasse Folgendes in Ihre "setupTimeline" -Methode ein, nachdem Sie die Hauptinhaltsansicht festgelegt haben:

1
 
2
	//setup onclick listener for tweet button 

3
LinearLayout tweetClicker = (LinearLayout)findViewById(R.id.tweetbtn); 
4
tweetClicker.setOnClickListener(this);

Die ID der Tweet-Schaltfläche entspricht der ID, die wir in der XML-Layoutdatei der Hauptzeitleiste enthalten haben. Die Hauptaktivitätsklasse wird Klicks auf die Tweet-Schaltfläche verarbeiten. Wenn Sie sich Ihre "onClick" -Methode in der Hauptaktivität ansehen ("TwitNiceActivity", wenn Sie den Namen im ersten Lernprogramm verwendet haben), sollte eine switch-Anweisung mit einer case-Anweisung für die Schaltfläche "signin" angezeigt werden. Fügen Sie eine zweite case-Anweisung für die Tweet-Schaltfläche wie folgt hinzu (vor der Standardanweisung):

1
 
2
	//user has pressed tweet button 

3
case R.id.tweetbtn: 
4
		//launch tweet activity 

5
	startActivity(new Intent(this, NiceTweet.class)); 
6
	break;

Hier starten wir einfach die Tweet-Aktivität. Wir müssen keine Informationen an die Aktivität weitergeben, da der Benutzer sie in diesem Fall einfach startet, um einen normalen Tweet zu senden.


Das ist es!

Das ist unsere Twitter App komplett! Führen Sie die App auf einem Emulator oder Gerät aus, um zu sehen, ob sie funktioniert. Beim ersten Start müssen Sie natürlich zustimmen, dass die App Ihr Twitter-Konto verwendet. Sie können optional ein separates Twitter-Konto erstellen, mit dem Sie die App testen können, anstatt Ihr normales Konto zu verwenden. Nach der Autorisierung sollte Ihnen die Home-Timeline angezeigt werden, die die neuesten Tweets der von Ihnen verfolgten Konten darstellt. Testen Sie das Tweeten, Retweeten und Antworten und stellen Sie sicher, dass Ihre Zeitleiste in dem von Ihnen gewählten Intervall automatisch aktualisiert wird.


Erweiterte Themen

In dieser Tutorial-Serie haben wir einen einfachen Twitter-Client für Android erstellt. Es gibt viele Möglichkeiten, die App zu verbessern und zu vebessern, z. B. die Möglichkeit, Direktnachrichten oder Benutzerprofile in der App anzuzeigen, anstatt den Webbrowser verwenden zu müssen. Sie können auch Erwähnungen von Benutzern in Tweets anklickbar machen (d. H. Eine beliebige Textzeichenfolge mit vorangestelltem "@" mit der Profilseite für diesen Benutzer verknüpfen). Ein ähnlicher Prozess würde es Ihnen ermöglichen, Hashtags zu unterstützen. Fortgeschrittenere Twitter-Clients zeigen bei der Auswahl eines einzelnen Tweets auch Konversationen an und zeigen die Antworten in chronologischer Reihenfolge an.

In Bezug auf die Anwendungsimplementierung gibt es auch Verbesserungen, die Sie in Betracht ziehen könnten. Wenn der Benutzer beispielsweise über eine geringe Konnektivität verfügt, können Sie das Herunterladen der Profilbilder als Hintergrundprozess implementieren. Sie können auch eine Form des Image-Caching implementieren, um die Effizienz zu maximieren. Anstatt dass die App die ListView automatisch mit neuen Tweets aktualisiert, können Sie oben in der Timeline eine Schaltfläche implementieren, mit der Benutzer die Anzeige steuern können. Die Schaltfläche gibt an, wie viele neue Tweets verfügbar sind. Schließlich können Sie die Effizienz verbessern, indem Sie den Service in einem separaten Thread ausführen.


Danke fürs Lesen

Ich hoffe, Ihnen hat diese Serie beim Erstellen eines Twitter-Clients für die Android-Plattform gefallen! Sie lernen nicht nur, wie Sie Ihre Apps mit Twitter verbinden, sondern haben auch Erfahrung mit der Verwendung einer externen Bibliothek sowie einer Vielzahl von Ressourcen für Android-Plattformen wie Datenbanken, Adapter, Dienste und Broadcasts. Dies sind alles Schlüsselkompetenzen, von denen Ihre zukünftigen Android-Projekte profitieren werden. Der herunterladbare Quellcode enthält zusätzliche Hinweise, die Sie möglicherweise hilfreich finden.