24838


いつもお世話になっております。  
無事画像投稿できましたが、実機でやると以下のエラーが出て画像が投稿できません。  
画像の容量が多すぎてソースを組み替えてみたのですが、投稿できそうにありません。  
ご教示願います。

### ソース

[code]

        private void tweet() {
         //画像アップロード
           if(gazou==true){
               new AsyncTask<Void, Void, Boolean>() {
                    @Override
                    protected Boolean doInBackground(Void... params) {
                        InputStream input = null;
                        try {
                            //mTwitterはOAuth認可済みであるとする
                            String message =mInputText.getText().toString();
    
                            for(int i =0;i<k;i++){
                                input=getDownSize(multi_uri[i]);
                                mediaIds[i] = (mTwitter.uploadMedia(String.format("[filename_%d]", i + 1), input).getMediaId());
    
                            }
                            if(k==0){
                                input=getDownSize(uri);
                                mediaIds = new long[1];
                                mediaIds[0] = (mTwitter.uploadMedia(String.format("[filename_%d]", 1), input).getMediaId());
    
                            }
                            StatusUpdate update = new StatusUpdate(message);
                            update.setMediaIds(mediaIds);
                            mTwitter.updateStatus(update);
                            try {
                                input.close();
                            } catch (IOException e) {
                                // TODO 自動生成された catch ブロック
                                e.printStackTrace();
                            }
    
                        } catch (TwitterException e) {
                            e.printStackTrace();
                            return false;
                        }
                        return true;
                    }
                    @Override
                    protected void onPostExecute(Boolean result) {
                        if(result) {
                            showToast("投稿に成功しました");
    
                        } else {
                            showToast("投稿に失敗しました");
                        }
                    }
                }.execute();
           }else{
               new AsyncTask<String, Void, Boolean>(){
                   @Override
                    protected Boolean doInBackground(String... params){
                       try {
                           // 省略
                           mTwitter.updateStatus(params[0]);
                           return true;
    
                        } catch (TwitterException e) {
                            return false;
                        }
    
                   }
                   @Override
                    protected void onPostExecute(Boolean result) {
                        if(result) {
                            showToast("投稿に成功しました");
                        } else {
                            showToast("投稿に失敗しました");
                        }
                    }
               }.execute(mInputText.getText().toString());
           }
       }
    
    
    
    private InputStream getDownSize(Uri uri){
           InputStream inputStream;
        try {
            inputStream = getContentResolver().openInputStream(uri);
            // 画像サイズ情報を取得する
            BitmapFactory.Options imageOptions = new BitmapFactory.Options();
            imageOptions.inJustDecodeBounds = true;
            BitmapFactory.decodeStream(inputStream, null, imageOptions);
            Log.v("image", "Original Image Size: " + imageOptions.outWidth + " x " + imageOptions.outHeight);
            // もし、画像が大きかったら縮小して読み込む
            //  今回はimageSizeMaxの大きさに合わせる
            Bitmap bitmap;
            int imageSizeMax = 500;
            inputStream = getContentResolver().openInputStream(uri);
            float imageScaleWidth = (float)imageOptions.outWidth / imageSizeMax;
            float imageScaleHeight = (float)imageOptions.outHeight / imageSizeMax;
    
            // もしも、縮小できるサイズならば、縮小して読み込む
            if (imageScaleWidth > 2 && imageScaleHeight > 2) {
                BitmapFactory.Options imageOptions2 = new BitmapFactory.Options();
    
                // 縦横、小さい方に縮小するスケールを合わせる
                int imageScale = (int)Math.floor((imageScaleWidth > imageScaleHeight ? imageScaleHeight : imageScaleWidth));
    
                // inSampleSizeには2のべき上が入るべきなので、imageScaleに最も近く、かつそれ以下の2のべき上の数を探す
                for (int i = 2; i <= imageScale; i *= 2) {
                    imageOptions2.inSampleSize = i;
                }
    
                bitmap = BitmapFactory.decodeStream(inputStream, null, imageOptions2);
                Log.v("image", "Sample Size: 1/" + imageOptions2.inSampleSize);
            } else {
                bitmap = BitmapFactory.decodeStream(inputStream);
            }
            return inputStream;
        } catch (FileNotFoundException e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
            return null;
        }
    
[/code]

### ログキャット

[code]

    04-29 18:40:42.542: W/System.err(31321): 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-29 18:40:42.542: W/System.err(31321): {"request":"\/1.1\/media\/upload.json","error":"media type unrecognized."}
    04-29 18:40:42.542: W/System.err(31321): Relevant discussions can be found on the Internet at:
    04-29 18:40:42.542: W/System.err(31321):    http://www.google.co.jp/search?q=137ce413 or
    04-29 18:40:42.542: W/System.err(31321):    http://www.google.co.jp/search?q=109dd5f6
    04-29 18:40:42.542: W/System.err(31321): TwitterException{exceptionCode=[137ce413-109dd5f6], statusCode=400, message=null, code=-1, retryAfter=1806, rateLimitStatus=RateLimitStatusJSONImpl{remaining=413, limit=415, resetTimeInSeconds=1461924649, secondsUntilReset=1806}, version=4.0.4}
    04-29 18:40:42.542: W/System.err(31321):    at twitter4j.HttpClientImpl.handleRequest(HttpClientImpl.java:164)
    04-29 18:40:42.542: W/System.err(31321):    at twitter4j.HttpClientBase.request(HttpClientBase.java:57)
    04-29 18:40:42.542: W/System.err(31321):    at twitter4j.HttpClientBase.post(HttpClientBase.java:86)
    04-29 18:40:42.542: W/System.err(31321):    at twitter4j.TwitterImpl.post(TwitterImpl.java:1822)
    04-29 18:40:42.542: W/System.err(31321):    at twitter4j.TwitterImpl.uploadMedia(TwitterImpl.java:243)
    04-29 18:40:42.542: W/System.err(31321):    at android.example.shutwitter.TweetActivity$3.doInBackground(TweetActivity.java:209)
    04-29 18:40:42.542: W/System.err(31321):    at android.example.shutwitter.TweetActivity$3.doInBackground(TweetActivity.java:1)
    04-29 18:40:42.542: W/System.err(31321):    at android.os.AsyncTask$2.call(AsyncTask.java:297)
    04-29 18:40:42.542: W/System.err(31321):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    04-29 18:40:42.542: W/System.err(31321):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
    04-29 18:40:42.542: W/System.err(31321):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
    04-29 18:40:42.542: W/System.err(31321):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    04-29 18:40:42.542: W/System.err(31321):    at java.lang.Thread.run(Thread.java:818)
    
[/code]


CC BY-SA 3.0
2016-04-29T04:52:16.207
24437
2016-05-14T00:30:26.943
2016-04-29T10:18:25.447
15276
15276
question
android eclipse twitter4j
実機での画像投稿ができません。原因は？


ルール知らず申し訳ございません。  
下記のように圧縮処理を追加することにより投稿することができました。  
閲覧ありがとうございまいた┏○))ﾍﾟｺり

[code]

    try {
                        //mTwitterはOAuth認可済みであるとする
                        String message =mInputText.getText().toString();
    
                        for(int i =0;i<k;i++){
                            Bitmap bitmap=getDownSize(multi_uri[i]);
                            ByteArrayOutputStream stream = new ByteArrayOutputStream();
                            bitmap.compress(Bitmap.CompressFormat.PNG, 0, stream);
                            byte[] imageInByte = stream.toByteArray();
    
                            ByteArrayInputStream bis = new ByteArrayInputStream(imageInByte);
                            mediaIds[i] = (mTwitter.uploadMedia(String.format("[filename_%d]", i + 1), bis).getMediaId());
    
                        }
                        if(k==0){
                            Bitmap bitmap=getDownSize(uri);
                            ByteArrayOutputStream stream = new ByteArrayOutputStream();
                            bitmap.compress(Bitmap.CompressFormat.PNG, 0, stream);
                            byte[] imageInByte = stream.toByteArray();
                            ByteArrayInputStream bis = new ByteArrayInputStream(imageInByte);
                            mediaIds = new long[1];
                            mediaIds[0] = (mTwitter.uploadMedia(String.format("[filename_%d]", 1),bis).getMediaId());
    
                        }
                        StatusUpdate update = new StatusUpdate(message);
                        update.setMediaIds(mediaIds);
                        mTwitter.updateStatus(update);
    
    
    
                    } catch (TwitterException e) {
                        e.printStackTrace();
                        return false;
                    }
    
[/code]


CC BY-SA 3.0
2016-05-14T00:30:26.943
24838
2016-05-14T00:30:26.943
15276
24437
answer