2016/04/24:途中まで完成したので内容を変更しました。
いつも有難うございます。
完成まであと一歩のところまで来ましたが、画像を2枚以上添付しボタンを押すとツイートに失敗してしまいます。
ですが画像を1枚選択するとツイートはできるのですがなぜか画像が添付されない状態でツイートされています。
知恵を貸してください、よろしくお願いします。
[画像を2枚以上で投稿]
https://gyazo.com/a6a9ddf905c22c54472a91ebc4983161
ソース[TweetActivity.java]
public class TweetActivity extends Activity {
private EditText mInputText;
private Twitter mTwitter;
private Button mGazou;
private ImageView imageView,imageView2,imageView3,imageView4;
private Boolean gazou=false;
UploadedMedia media1=null;
UploadedMedia media2=null;
UploadedMedia media3=null;
UploadedMedia media4=null;
int k =0;
Uri[] multi_uri=null;
Uri uri = null;
private static final int RESULT_PICK_IMAGEFILE = 1001;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.new_tweet);
mTwitter = TwitterUtils.getTwitterInstance(this);
//Twitter文字入力
mInputText = (EditText) findViewById(R.id.input_text);
//Twitter画像選択(ギャラリーから)
mGazou = (Button)findViewById(R.id.button1);
mGazou.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
intent.setType("image/*");
startActivityForResult(intent, RESULT_PICK_IMAGEFILE);
}
});
findViewById(R.id.action_tweet).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tweet();
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
imageView=(ImageView) findViewById(R.id.imageView1);
imageView2=(ImageView) findViewById(R.id.imageView2);
imageView3=(ImageView) findViewById(R.id.imageView3);
imageView4=(ImageView) findViewById(R.id.imageView4);
if (requestCode == RESULT_PICK_IMAGEFILE && resultCode == Activity.RESULT_OK && resultData != null) {
gazou=true;
uri = resultData.getData();
//Log.i("", "Uri: " + uri.toString());
float size =0.7f; //画像プレビュー画面の表示倍率
if(uri==null){
//複数選択
ClipData clipData = resultData.getClipData();
List list = new ArrayList();
Bitmap bmp =null;
k = clipData.getItemCount();
Log.i("", "画像選択: " + String.valueOf(k));
for( int i = 0; i < k; i ++ ){
ClipData.Item item = clipData.getItemAt(i);
uri = item.getUri();
list.add(uri);
}
multi_uri = ( Uri[] )list.toArray( new Uri[0] );
switch(k){
case 1:
Glide.with(this).load(multi_uri[0]).thumbnail(size).into(imageView);
imageView2.setVisibility(View.GONE);
imageView3.setVisibility(View.GONE);
imageView4.setVisibility(View.GONE);
break;
case 2:
Glide.with(this).load(multi_uri[0]).thumbnail(size).into(imageView);
Glide.with(this).load(multi_uri[1]).thumbnail(size).into(imageView2);
imageView3.setVisibility(View.GONE);
imageView4.setVisibility(View.GONE);
break;
case 3:
Glide.with(this).load(multi_uri[0]).thumbnail(size).into(imageView);
Glide.with(this).load(multi_uri[1]).thumbnail(size).into(imageView2);
Glide.with(this).load(multi_uri[2]).thumbnail(size).into(imageView3);
imageView4.setVisibility(View.GONE);
break;
case 4:
Glide.with(this).load(multi_uri[0]).thumbnail(size).into(imageView);
Glide.with(this).load(multi_uri[1]).thumbnail(size).into(imageView2);
Glide.with(this).load(multi_uri[2]).thumbnail(size).into(imageView3);
Glide.with(this).load(multi_uri[3]).thumbnail(size).into(imageView4);
break;
default:
showToast("Twitterへの画像投稿は4枚までです");
imageView.setVisibility(View.GONE);
imageView2.setVisibility(View.GONE);
imageView3.setVisibility(View.GONE);
imageView4.setVisibility(View.GONE);
gazou=false;
break;
}
}else{
gazou=true;
Glide.with(this).load(uri).thumbnail(size).into(imageView);
imageView2.setVisibility(View.GONE);
imageView3.setVisibility(View.GONE);
imageView4.setVisibility(View.GONE);
try {
media1 = mTwitter.uploadMedia(new File(uri.toString()));
} catch (TwitterException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.new_tweet_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch (item.getItemId()) {
case R.id.menu_not:
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
private void tweet() {
AsyncTask<String, Void, Boolean> task = new AsyncTask<String, Void, Boolean>() {
@Override
protected Boolean doInBackground(String... params) {
try {
long[]mediaIds = new long[k];
StatusUpdate update = new StatusUpdate(params[0]);
//画像アップロード
if(gazou==true){
switch(k){
case 1:
try {
media1 = mTwitter.uploadMedia(new File(uri.toString()));
mediaIds[0]=media1.getMediaId();
} catch (TwitterException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
break;
case 2:
try {
media1 = mTwitter.uploadMedia(new File(multi_uri[0].toString()));
media2 = mTwitter.uploadMedia(new File(multi_uri[1].toString()));
mediaIds[0]=media1.getMediaId();
mediaIds[1]=media2.getMediaId();
} catch (TwitterException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
break;
case 3:
try {
media1 = mTwitter.uploadMedia(new File(multi_uri[0].toString()));
media2 = mTwitter.uploadMedia(new File(multi_uri[1].toString()));
media3 = mTwitter.uploadMedia(new File(multi_uri[2].toString()));
mediaIds[0]=media1.getMediaId();
mediaIds[1]=media2.getMediaId();
mediaIds[2]=media3.getMediaId();
} catch (TwitterException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
break;
case 4:
try {
media1 = mTwitter.uploadMedia(new File(multi_uri[0].toString()));
media2 = mTwitter.uploadMedia(new File(multi_uri[1].toString()));
media3 = mTwitter.uploadMedia(new File(multi_uri[2].toString()));
media4 = mTwitter.uploadMedia(new File(multi_uri[3].toString()));
mediaIds[0]=media1.getMediaId();
mediaIds[1]=media2.getMediaId();
mediaIds[2]=media3.getMediaId();
mediaIds[3]=media4.getMediaId();
} catch (TwitterException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
Log.i("ImageTAG", mediaIds.toString());
update.setMediaIds(mediaIds);
mTwitter.updateStatus(update);
}else{
mTwitter.updateStatus(params[0]);
}
return true;
} catch (TwitterException e) {
e.printStackTrace();
return false;
}
}
}
☆追記
すいません、これ以上ここには書けないので下記よりお願いします。
https://goo.gl/tnRNAI
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
Android/Javaともに分からないのでボンヤリ回答になりますが、
ログでいきなり、
content:/com.android.providers.media.documents/document/image%3A37194 is not found.
と表示されていることから、画像ファイルを読み込めていない(APIに渡せていない)のではないでしょうか?Twitter APIからBad Requestが返ってきています。
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.
media_idが見つからず。(画像を渡せていないので当然?)
message - A media id was not found.
まずは、画像をAPIに渡すところから見直してみてはどうでしょうか?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.10%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
fuzzball
2016/04/25 10:59
「ツイートに失敗しました」のメッセージはどういうときに表示されるのか教えて下さい。また、アップロードに成功しているかどうか(mediaIdsのログ)教えて下さい。
nasulrj
2016/04/25 13:31
有難うございます。字数制限に引っかかり編集がうまくできなかったため、ログキャットを上記URL先に置きました。
よろしくお願いします。