2014年7月6日日曜日

自作Twitterクライアント作成の記録(24)複数画像の扱いとツイート可能文字数の表示

ほんの少し前に私のフォロワーさんから複数画像の投稿に対応しないの?
というメッセージをいただいたのでさっそく実装してきました。

まず現状のライブラリで複数画像の投稿ができるのかと思い調べてみたら。

Twitter4Jで複数の画像をアップロードしてツイートする方法
という何ともドンピシャな内容が書かれたサイトにありつくことに。
これを見て思ったのは、どうやら一枚一枚アップロードしてから後でリンクを張るみたいな構造になってるんですね。こういうのも触れてみて初めてわかることなのかもね・・・
というのは置いておき、無論アップロードということなので通信の動作が入るため別のスレッド等でこの処理を書かないといけないわけですが、まあツイートを投稿する非同期のメゾットにぶち込んでおけば問題なく動くと思います。

で、このサイトで宣言されているpath1,path2という変数Fileという型ではなくStringのため
   uri= data.getData(); //選択した画像の受け取り
   ContentResolver cr = getContentResolver();
String[] columns = { MediaStore.Images.Media.DATA };
Cursor c = cr.query(uri, columns, null, null, null);

c.moveToFirst();   
            if(path1 == null){
    path1 = c.getString(0);
   }else if(path2 == null)
   {
    path2 = c.getString(0);
   }else if(path3 == null)
   {
    path3 = c.getString(0);
   }else if(path4 == null)
   {
    path4 = c.getString(0);
   }
という風にそのままpathとでも名前をつけた変数に代入しておくといいと思います。

ちなみに
             Intent intent = new Intent(Intent.ACTION_PICK);
         intent.setType("image/*");
         startActivityForResult(intent, 1);
等をボタン等のイベントに書いておくとギャラリーが開いて
   protected void onActivityResult(int requestCode, int resultCode, Intent data) {

  super.onActivityResult(requestCode, resultCode, data);
  if (resultCode != RESULT_OK) return;

  if (requestCode == 1) {
   uri= data.getData(); //選択した画像の受け取り
   ContentResolver cr = getContentResolver();
String[] columns = { MediaStore.Images.Media.DATA };
Cursor c = cr.query(uri, columns, null, null, null);

c.moveToFirst();
if(path1 == null){
path1 = c.getString(0);
}else if(path2 == null)
{
path2 = c.getString(0);
}else if(path3 == null)
{
path3 = c.getString(0);
}else if(path4 == null)
{
path4 = c.getString(0);
}
  }
  }
これでギャラリーで選択した画像が取れるみたいです。

1つ向こうのサイトで書いてることで気を付けておくこと
update.setMediaIds(new long[2]{media1.getMediaId(), media2.getMediaId()});
これの[2]の部分を[]にしないとコンパイルが通りません何故か。
配列定数は、イニシャライザーにおいてのみ使用可能です。
とか出て怒られます。
配列定数はわかるけど、イニシャライザーってなんだ?
今度調べよう。

さてタイトルにあるもう一つの項目文字数表示。
こちらも何故かドンピシャなものが
[Android] EditTextの入力文字数を動的にカウント表示する方法
こちらのソースを参考にさせていただきました。
あとは表示の仕方を自分で決めてしまうだけ。ね、簡単でしょ?(簡単じゃないフラグ)
まあとにかく、徐々にクライアントとして必要な機能はついてきているわけですよ。

そろそろGooglePlayで公開してもいいかな。
でもその前にアイコンと、アプリ名をもっとセンスのいいものに・・・・誰か案をくださいお願いしま(ry

最後に
え?DMでの画像投稿はどうしたって?
まだだよちくしょーーめ!

0 件のコメント:

コメントを投稿