Android 安卓图像推文

Android 安卓图像推文,android,image,twitter,Android,Image,Twitter,我正在尝试从sd卡文件夹中发送图像,但仍然无法做到这一点。我正在使用twitter4j-core-3.0.3api,并授予了权限android.permission.INTERNET,android.permission.ACCESS\u NETWORK\u STATE。这是我的密码 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContent

我正在尝试从sd卡文件夹中发送图像,但仍然无法做到这一点。我正在使用twitter4j-core-3.0.3api,并授予了权限
android.permission.INTERNET
android.permission.ACCESS\u NETWORK\u STATE
。这是我的密码

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);
}
编辑:当我尝试在这部分推文时

StatusUpdate status = new StatusUpdate("");
status.setMedia(targetDirector);
twitter.updateStatus(status);
twitter.updateStatus(“如果你在twitter上读到这篇文章,它就成功了!”)然后创建相同的错误


几天来我一直在努力,但没有找到解决办法。请任何人帮我解决这个问题。谢谢你改变你的异步任务像这样使用它对我有用

 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();              
            }
        });
    }
}
twitterButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v)
{
字符串状态=空;
新的updateWitterStatus().execute(状态);
}
}); 
公共类UpdateWitterStatus扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
ProgressBar_show();
}
受保护的字符串doInBackground(字符串…args){
试一试{
ConfigurationBuilder=新的ConfigurationBuilder();
setOAuthConsumerKey(TWITTER用户密钥);
setOAuthConsumerCret(TWITTER\u CONSUMER\u SECRET);
//访问令牌
access\u token=SharedReferences.getString(PREF\u KEY\u OAUTH\u token,“”);
//访问令牌秘密
access\u token\u secret=SharedReferences.getString(PREF\u KEY\u OAUTH\u secret,“”);
字符串upload\u image\u url=postPicture(“/mnt/sdcard/yourmage.jpg”,”);
Log.d(“------------upload_image_url=“+upload_image_url.toString()+”-----------“,”);
}捕获(例外e){
Log.d(“Twitter更新错误”,例如getMessage());
}
返回null;
}
公共字符串后期图片(字符串文件名、字符串消息){
试一试{
Log.d(“---start---postPicture()----”,“”);
文件=新文件(文件名);
MediaProvider mProvider=getMediaProvider();
字符串accessTokenToken=访问令牌;
String accessTokenSecret=访问令牌密钥;
Properties props=新属性();
props.put(PropertyConfiguration.MEDIA\u提供者、mProvider);
props.put(PropertyConfiguration.OAUTH\u ACCESS\u TOKEN,accessTokenToken);
props.put(PropertyConfiguration.OAUTH\u ACCESS\u TOKEN\u SECRET,accessTokenSecret);
props.put(PropertyConfiguration.OAUTH_CONSUMER_KEY、TWITTER_CONSUMER_KEY);
props.put(PropertyConfiguration.OAUTH\u CONSUMER\u SECRET、TWITTER\u CONSUMER\u SECRET);
配置配置=新属性配置(props);
ImageUploadFactory工厂=新ImageUploadFactory(conf);
ImageUpload=factory.getInstance(mProvider);
字符串url;
url=upload.upload(文件、消息);
Log.d(“---end---postPicture()----”,“”);
返回url;
}捕获(例外e){
e、 printStackTrace();
}
返回null;
}
MediaProvider getMediaProvider(){
Log.d(“---start---getMediaProvider()----”,“”);
SharedReferences preferences=PreferenceManager.GetDefaultSharedReferences(MainActivity.this);
stringprovider=preferences.getString(“pictureService”、“twitter”);
媒体提供商mProvider;
if(提供者等于(“yfrog”))
mProvider=MediaProvider.YFROG;
else if(provider.equals(“twitpic”))
mProvider=MediaProvider.TWITPIC;
else if(provider.equals(“twitter”))
mProvider=MediaProvider.TWITTER;
其他的
抛出新的IllegalArgumentException(“图片提供程序”+提供程序+“未知”);
Log.d(“---end---getMediaProvider()----”,“”);
返回mProvider;
}
受保护的void onPostExecute(字符串文件\u url){
ProgressBar_hide();
//从后台线程更新UI
runOnUiThread(新的Runnable(){
公开募捐{
Toast.makeText(getApplicationContext(),“状态推文成功”,Toast.LENGTH_SHORT.show();
}
});
}
}

更改您的
AsyncTask
像这样使用它对我有用

 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();              
            }
        });
    }
}
twitterButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v)
{
字符串状态=空;
新的updateWitterStatus().execute(状态);
}
}); 
公共类UpdateWitterStatus扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
ProgressBar_show();
}
受保护的字符串doInBackground(字符串…args){
试一试{
ConfigurationBuilder=新的ConfigurationBuilder();
setOAuthConsumerKey(TWITTER用户密钥);
setOAuthConsumerCret(TWITTER\u CONSUMER\u SECRET);
//访问令牌
access\u token=SharedReferences.getString(PREF\u KEY\u OAUTH\u token,“”);
//访问令牌秘密
access\u token\u secret=SharedReferences.getString(PREF\u KEY\u OAUTH\u secret,“”);
字符串upload\u image\u url=postPicture(“/mnt/sdcard/yourmage.jpg”,”);
Log.d(“------------upload_image_url=“+upload_image_url.toString()+”-----------“,”);
}捕获(例外e){
Log.d(“Twitter更新错误”,例如getMessage());
}
返回null;
}
公共字符串后期图片(字符串文件名、字符串消息){
试一试{
Log.d(“---start---postPicture()----”,“”);
文件=新文件(文件名);
MediaProvider mProvider=getMediaProvider();
字符串accessTokenToken=访问令牌;
String accessTokenSecret=访问令牌密钥;
属性道具=