package yifeiyuan.practice.practicedemos.thirdparty; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.View; import android.widget.TextView; import com.twitter.sdk.android.core.Callback; import com.twitter.sdk.android.core.OAuthSigning; import com.twitter.sdk.android.core.Result; import com.twitter.sdk.android.core.TwitterAuthConfig; import com.twitter.sdk.android.core.TwitterAuthToken; import com.twitter.sdk.android.core.TwitterCore; import com.twitter.sdk.android.core.TwitterException; import com.twitter.sdk.android.core.TwitterSession; import com.twitter.sdk.android.core.identity.TwitterAuthClient; import com.twitter.sdk.android.core.identity.TwitterLoginButton; import com.twitter.sdk.android.core.internal.oauth.OAuth1aService; import com.twitter.sdk.android.tweetcomposer.TweetComposer; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.ProtocolException; import java.net.URL; import java.util.HashMap; import java.util.Map; import javax.net.ssl.HttpsURLConnection; import butterknife.ButterKnife; import butterknife.InjectView; import yifeiyuan.practice.practicedemos.R; public class TwitterActivity extends AppCompatActivity { private static final String TAG = "TwitterActivity"; @InjectView(R.id.btn_twitter) TwitterLoginButton mBtnTwitter; @InjectView(R.id.tv_result) TextView mTvResult; @InjectView(R.id.tv_custom) TextView mTvCustom; @InjectView(R.id.tv_info) TextView mTvInfo; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_twitter); ButterKnife.inject(this); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { TweetComposer.Builder builder = new TweetComposer.Builder(TwitterActivity.this) .text("just setting up my Fabric. http://www.baidu.com ") //必须本地文件 坑 .image(Uri.parse("http://cdn.myanimelist.net/s/common/uploaded_files/1444594417-07dca13b3dad5ede2c548ddb26158c8f.jpeg")); // .image(myImageUri); try { builder.url(new URL("http://www.baidu.com")); } catch (MalformedURLException e) { e.printStackTrace(); } builder.show(); } }); setUpTwitterButton(); mTvCustom.setOnClickListener(v -> { new TwitterAuthClient().authorize(TwitterActivity.this, new Callback<TwitterSession>() { @Override public void success(Result<TwitterSession> result) { String name = result.data.getUserName(); long userId = result.data.getUserId();//3313987080 long id = result.data.getId(); TwitterAuthToken token = result.data.getAuthToken(); String secret = token.secret; String strToken = token.token; StringBuilder sb = new StringBuilder(); sb.append("\nTwitter success:") .append("bookName:") .append(name + "\n") .append("userId:") .append(userId + "\n") .append("id:") .append(id + "\n") .append("secret:") .append(secret + "\n") .append("strToken:") .append(strToken + "\n") ; Log.d("Twitter", "success: name:" + name + "\n" + userId + ":" + userId + "\n" + "id:" + id + "\n" + "secret" + ":" + secret + "\n" + "strToken" + ":" + strToken + "\n" ); mTvResult.setText(sb.toString()); getInfo(token); } @Override public void failure(TwitterException e) { Log.d(TAG, "failure() called with: " + "e = [" + e + "]"); } }); }); } private void setUpTwitterButton() { mBtnTwitter.setCallback(new Callback<TwitterSession>() {//userName alancheen06 secret 4H6cMSpc59EbLSlcQ5QI0SzAUXAAZnxDZ40KUqQkJkl7s token 3313987080-L3UPicTGjEZrNjpjsobeDQRCbWGFyczUCV2O408 @Override public void success(Result<TwitterSession> result) { Log.d("Twitter", "success() called with: " + "result = [" + result + "]++++data" + result.data); String name = result.data.getUserName(); long userId = result.data.getUserId();//3313987080 long id = result.data.getId(); TwitterAuthToken token = result.data.getAuthToken(); String secret = token.secret; String strToken = token.token; // TypedInput input = result.response.getBody(); Notice result.response为null // input.length(); // input.mimeType(); // String url = result.response.getUrl(); // String reason = result.response.getReason(); // int status = result.response.getStatus(); // List<Header> header = result.response.getHeaders(); StringBuilder sb = new StringBuilder(); sb.append("\nTwitter success:") .append("name:") .append(name + "\n") .append("userId:") .append(userId + "\n") .append("id:") .append(id + "\n") .append("secret:") .append(secret + "\n") .append("strToken:") .append(strToken + "\n") ; Log.d("Twitter", sb.toString()); mTvResult.setText(sb.toString()); getInfo(token); } //Cannonball @Override public void failure(TwitterException exception) { Log.d("Twitter", "failure() called with: " + "exception = [" + exception.getMessage() + "]"); } }); } /*** * {"id":3313987080,"id_str":"3313987080","bookName":"\u7a0b\u5e8f\u4ea6\u975e\u733fAlan","screen_name":"alancheen06","location":"","profile_location":null,"description":"An android developer from China.","url":null,"entities":{"description":{"urls":[]}},"protected":false,"followers_count":1,"friends_count":34,"listed_count":0,"created_at":"Thu Aug 13 05:29:54 +0000 2015","favourites_count":2,"utc_offset":-25200,"time_zone":"Pacific Time (US & Canada)","geo_enabled":false,"verified":false,"statuses_count":13,"lang":"en","status":{"created_at":"Mon Oct 12 04:23:09 +0000 2015","id":653425648577286144,"id_str":"653425648577286144","text":"@Support How to add phone num?Thanks a lot!","source":"\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":17874544,"in_reply_to_user_id_str":"17874544","in_reply_to_screen_name":"Support","geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"favorite_count":1,"entities":{"hashtags":[],"symbols":[],"user_mentions":[{"screen_name":"Support","bookName":"Twitter Support","id":17874544,"id_str":"17874544","indices":[0,8]}],"urls":[]},"favorited":false,"retweeted":false,"lang":"en"},"contributors_enabled":false,"is_translator":false,"is_translation_enabled":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/631699830872498176\/yThxaLUe_normal.jpg","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/631699830872498176\/yThxaLUe_normal.jpg","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"has_extended_profile":false,"default_profile":true,"default_profile_image":false,"following":false,"follow_request_sent":false,"notifications":false} * @param token */ private void getInfo(final TwitterAuthToken token) { new Thread(new Runnable() { @Override public void run() { TwitterAuthConfig authConfig = TwitterCore.getInstance().getAuthConfig(); OAuthSigning oauthSigning = new OAuthSigning(authConfig, token); Map<String, String> authHeaders = oauthSigning.getOAuthEchoHeadersForVerifyCredentials(); URL url = null; try { // url = new URL("https://api.twitter.com/1.1/users/show.json?"); url = new URL("https://api.twitter.com/1.1/users/show.json?screen_name=alancheen06&user_id=3313987080"); // url = new URL("http://api.yourbackend.com/check_credentials.json"); HttpURLConnection conn = (HttpsURLConnection) url.openConnection(); conn.setRequestMethod("GET"); // for (Map.Entry<String, String> entry : authHeaders.entrySet()) { // connection.setRequestProperty(entry.getKey(), entry.getValue()); // } // connection.addRequestProperty("Authorization","OAuth oauth_consumer_key=\"7Ud4sn002Jquc6hR6XFREEqds\", oauth_nonce=\"456e1966e1db379f36f1ea9551ce0ad8\", oauth_signature=\"QWGBWcurKrLd5RvtDwjzmqtasBc%3D\", oauth_signature_method=\"HMAC-SHA1\", oauth_timestamp=\"1444727699\", oauth_token=\"3313987080-h6f0ecdEc100MCQjpKyTuiNVakj6nZ0bdV2HvUw\", oauth_version=\"1.0\""); Map<String, String> par = new HashMap<String, String>(); par.put("screen_name", "alancheen06"); par.put("user_id", "3313987080"); OAuth1aService.signRequest(authConfig, token, conn, par); conn.connect(); int status = conn.getResponseCode(); //得到读取的内容(流) InputStreamReader in = new InputStreamReader(conn.getInputStream()); // 为输出创建BufferedReader BufferedReader buffer = new BufferedReader(in); String inputLine = null; String resultData = ""; //使用循环来读取获得的数据 while (((inputLine = buffer.readLine()) != null)) { //我们在每一行后面加上一个"\n"来换行 resultData += inputLine + "\n"; } JSONObject jo = new JSONObject(resultData); String imgUrl = jo.getString("profile_image_url"); Log.d("Twitter", "run: resultData" + resultData); final String aa = resultData; runOnUiThread(()->mTvInfo.setText(aa)); } catch (MalformedURLException e) { e.printStackTrace(); } catch (ProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } } }).start(); } protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); mBtnTwitter.onActivityResult(requestCode, resultCode, data);//140 requestCode } }