実機での画像投稿ができません。原因は?
いつもお世話になっております。
無事画像投稿できましたが、実機でやると以下のエラーが出て画像が投稿できません。
画像の容量が多すぎてソースを組み替えてみたのですが、投稿できそうにありません。
ご教示願います。
ソース
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;
}
ログキャット
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)