Android的图片Tweet图片、Android、Tweet

2023-09-05 10:57:35 作者:姐不擅长温柔

我米试图鸣叫从SD卡文件夹中的图像,但仍无法做到这一点。我米使用 twitter4j核-3.0.3 API,并给了权限 android.permission.INTERNET对 android.permission.ACCESS_NETWORK_STATE 。这是我的code

I m trying to tweet image from sd card folder but still can't do that. I m using twitter4j-core-3.0.3 api and gave permissions android.permission.INTERNET,android.permission.ACCESS_NETWORK_STATE. Here is my code

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);


    mSharedPreferences = getApplicationContext().getSharedPreferences(
            "MyPref", 0);

    twitterButton = (Button) findViewById(R.id.twitPic);

    twitterButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) 
        {
            new ImageSender().execute();

        }
    });

    if (!isTwitterLoggedInAlready()) {
        Uri uri = getIntent().getData();
        if (uri != null && uri.toString().startsWith(TWITTER_CALLBACK_URL)) {
            // oAuth verifier
            String verifier = uri
                    .getQueryParameter(URL_TWITTER_OAUTH_VERIFIER);

            try {
                requestToken = twitter
                        .getOAuthRequestToken(TWITTER_CALLBACK_URL);
                // Get the access token
                accessToken = twitter.getOAuthAccessToken(
                        requestToken, verifier);

                // Shared Preferences
                Editor e = mSharedPreferences.edit();

                // After getting access token, access token secret
                // store them in application preferences
                e.putString(PREF_KEY_OAUTH_TOKEN, accessToken.getToken());
                e.putString(PREF_KEY_OAUTH_SECRET,
                        accessToken.getTokenSecret());
                // Store login status - true
                e.putBoolean(PREF_KEY_TWITTER_LOGIN, true);
                e.commit(); // save changes

                Log.e("Twitter OAuth Token", "> " + accessToken.getToken());


            } catch (Exception e) {
                // Check log for login errors
                Log.e("Twitter Login Error", "> " + e.getMessage());
            }
        }
    }       

}
private class ImageSender extends AsyncTask<URL, Integer, Long> {
    private String url;

    protected void onPreExecute() {
         pDialog = ProgressDialog.show(MainActivity.this, "", "Sending image...", true);             
         pDialog.setCancelable(false);
         pDialog.show();
    }

    protected Long doInBackground(URL... urls) {
         long result = 0;


        Log.d(TAG, "Start sending image...");

try {
    String ExternalStorageDirectoryPath = Environment
              .getExternalStorageDirectory()
              .getAbsolutePath();

    String targetPath = ExternalStorageDirectoryPath + "/Friends/"+"image4.jpg";


    File targetDirector = new File(targetPath);

    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 = new TwitterFactory(builder.build()).getInstance(accessToken);

    StatusUpdate status = new StatusUpdate("");
    status.setMedia(targetDirector);

    twitter.updateStatus(status);


    result = 1;

    Log.d(TAG, "Image uploaded, Twitpic url is " + url);    
} catch (TwitterException e) {  
Log.e(TAG, "Failed to send image "+e);
e.printStackTrace();
}
        return result;
        }

        protected void onProgressUpdate(Integer... progress) {
        }

        protected void onPostExecute(Long result) {
         pDialog.cancel();

         String text = (result == 1) ? "Image sent successfully.\n Twitpic url is: " + url : "Failed to send image";

         Toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG).show();
        }
    }
private boolean isTwitterLoggedInAlready() {
    // return twitter login status from Shared Preferences
    return mSharedPreferences.getBoolean(PREF_KEY_TWITTER_LOGIN, false);
}

下面是我的日志

04-02 06:38:02.275: E/Tag(1762): Failed to send image 400:The request was invalid. An accompanying error message will explain why. This is the status code will be returned during version 1.0 rate limiting(https://dev.twitter.com/pages/rate-limiting). In API v1.1, a request without authentication is considered invalid and you will get this response.
04-02 06:38:02.275: E/Tag(1762): message - Bad Authentication data
04-02 06:38:02.275: E/Tag(1762): code - 215
04-02 06:38:02.275: E/Tag(1762): Relevant discussions can be found on the Internet at:
04-02 06:38:02.275: E/Tag(1762):    http://www.google.co.jp/search?q=b2b52c28 or
04-02 06:38:02.275: E/Tag(1762):    http://www.google.co.jp/search?q=11331d43
04-02 06:38:02.275: E/Tag(1762): TwitterException{exceptionCode=[b2b52c28-11331d43], statusCode=400, message=Bad Authentication data, code=215, retryAfter=-1, rateLimitStatus=null, version=3.0.3}

编辑::当我试图在这部分鸣叫文本

When i try to tweet a text in this portion

StatusUpdate status = new StatusUpdate("");
status.setMedia(targetDirector);
twitter.updateStatus(status);

twitter.updateStatus(如果你在Twitter上阅读,它的工作!); 然后同样的错误创建

to twitter.updateStatus("If you're reading this on Twitter, it worked!"); then same error creates.

我为它的一些天,但没有得到解决方案。请人帮我解决了problem.Thanks

I m on it from some days but get no solution. Please anyone help me to solve the problem.Thanks

推荐答案

改变你的的AsyncTask 这样使用它为我工作。

change you AsyncTask use like this it is working for me

 twitterButton.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) 
    {
        String status = null;   
    new updateTwitterStatus().execute(status);

    }
}); 

public class updateTwitterStatus extends AsyncTask<String, String, String> {         
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        ProgressBar_show();
    }

    protected String doInBackground(String... args) {

        try {
            ConfigurationBuilder builder = new ConfigurationBuilder();
            builder.setOAuthConsumerKey(TWITTER_CONSUMER_KEY);
            builder.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET);

            // Access Token
            access_token = SharedPreferences.getString(PREF_KEY_OAUTH_TOKEN, "");
            // Access Token Secret
            access_token_secret = SharedPreferences.getString(PREF_KEY_OAUTH_SECRET, "");            

            String upload_image_url = postPicture( "/mnt/sdcard/yourimage.jpg", " ");
            Log.d("--------------upload_image_url=" + upload_image_url.toString() + "---------", " ");

        } catch (Exception e) {              
            Log.d("Twitter Update Error", e.getMessage());
        }
        return null;
    }

    public String postPicture(String fileName, String message) {

        try {
            Log.d("----start---postPicture()---", " ");
            File file = new File(fileName);
            MediaProvider mProvider = getMediaProvider();

            String accessTokenToken = access_token;
            String accessTokenSecret = access_token_secret;

            Properties props = new Properties();
            props.put(PropertyConfiguration.MEDIA_PROVIDER, mProvider);
            props.put(PropertyConfiguration.OAUTH_ACCESS_TOKEN, accessTokenToken);
            props.put(PropertyConfiguration.OAUTH_ACCESS_TOKEN_SECRET, accessTokenSecret);
            props.put(PropertyConfiguration.OAUTH_CONSUMER_KEY, TWITTER_CONSUMER_KEY);
            props.put(PropertyConfiguration.OAUTH_CONSUMER_SECRET, TWITTER_CONSUMER_SECRET);
            Configuration conf = new PropertyConfiguration(props);

            ImageUploadFactory factory = new ImageUploadFactory(conf);
            ImageUpload upload = factory.getInstance(mProvider);
            String url;
            url = upload.upload(file, message);
            Log.d("----end---postPicture()---", " ");
            return url;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    MediaProvider getMediaProvider() {

        Log.d("----start---getMediaProvider()---", " ");

        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
        String provider = preferences.getString("pictureService", "twitter");

        MediaProvider mProvider;
        if (provider.equals("yfrog"))
            mProvider = MediaProvider.YFROG;
        else if (provider.equals("twitpic"))
            mProvider = MediaProvider.TWITPIC;
        else if (provider.equals("twitter"))
            mProvider = MediaProvider.TWITTER;
        else
            throw new IllegalArgumentException("Picture provider " + provider + " unknown");

        Log.d("----end---getMediaProvider()---", " ");

        return mProvider;
    }

    protected void onPostExecute(String file_url) {
        ProgressBar_hide();
        // updating UI from Background Thread
        runOnUiThread(new Runnable() {
            public void run() {
                Toast.makeText(getApplicationContext(), "Status tweeted successfully", Toast.LENGTH_SHORT).show();              
            }
        });
    }
}