質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

0回答

270閲覧

androidで動画をListviewで再生するとエラーが起きます

takeda211

総合スコア4

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2019/09/03 05:55

androidのアプリをjavaでandroidstudioで作成しています。
googlemapをタップすると周辺10㎞のツイートを表示するというアプリです。

問題点

取得したツイートをListviewに表示する際、動画を表示させたいのですが
・該当のツイートではないのに動画が表示される
・動画を表示させると落ちる
・listviewを戻しても動画が再生されない。
という問題が起きます。
SurfaceView、mediaplayerを使用して動画を再生しています。
解決方法をよろしくお願い致します。

該当のソースコード

Java

1public class MapsSubActivity extends ListActivity { 2 3 private TweetAdapter01 mAdapter; 4 private Twitter mTwitter; 5 public SurfaceView mSurfaceView; 6 public SurfaceHolder mHolder; 7 public MediaPlayer mMediaPlayer; 8 public String path1 = ""; 9 @Override 10 public void onCreate(Bundle savedInstanceState) { 11 super.onCreate(savedInstanceState); 12 mAdapter = new TweetAdapter01(this); 13 reloadTimeLine(); 14 setListAdapter(mAdapter); 15 } 16 17 18 private void reloadTimeLine() { 19 AsyncTask<Void, Void, List<Status>> task = new AsyncTask<Void, Void, List<twitter4j.Status>>() { 20 21 22 23 //経度緯度の受け渡し 24 Intent intent = getIntent(); 25 String strLat = intent.getStringExtra("strLat");//除外ワード 26 String strLong = intent.getStringExtra("strLong");//アカウントを指定 27 double dLat = Double.parseDouble(strLat); 28 double dLong = Double.parseDouble(strLong); 29 30 31 public final String API_KEY = "XXXXXXX"; 32 public final String API_SECRET = "XXXXXXX"; 33 public final String ACCESS_TOKEN = "XXXXXXX"; 34 public final String ACCESS_TOKEN_SECRET = "XXXXXXX"; 35 36 @Override 37 protected List<twitter4j.Status> doInBackground(Void... params) { 38 try { 39 40 41 String strQuery = null; 42 Twitter tw = new TwitterFactory().getInstance(); 43 tw.setOAuthConsumer(API_KEY, API_SECRET); 44 AccessToken at = new AccessToken(ACCESS_TOKEN, ACCESS_TOKEN_SECRET); 45 tw.setOAuthAccessToken(at); 46 ArrayList<twitter4j.Status> list = new ArrayList<twitter4j.Status>(); 47 Query query = new Query(); 48 query.setCount(100); 49 GeoLocation geo = new GeoLocation(dLat, dLong); 50 query.setGeoCode(geo, 10.0, Query.KILOMETERS); 51 query.setQuery(strQuery); 52 QueryResult result = tw.search(query); 53 String str = String.valueOf(result.getCount()); 54 55 for (twitter4j.Status tweet : result.getTweets()) { 56 list.add(tweet); 57 } 58 if (result.hasNext()) { 59 query = result.nextQuery(); 60 } 61 return list; 62 } catch(TwitterException e){ 63 e.printStackTrace(); 64 } 65 66 return null; 67 } 68 69 @Override 70 protected void onPostExecute(List<twitter4j.Status> result) { 71 if (result != null) { 72 mAdapter.clear(); 73 for (twitter4j.Status status : result) { 74 mAdapter.add(status); 75 Log.d("testE","zoku"); 76 } 77 getListView().setSelection(0); 78 } else { 79 } 80 } 81 }; 82 task.execute(); 83 } 84 85 private class TweetAdapter01 extends ArrayAdapter<Status> { 86 87 private LayoutInflater mInflater; 88 89 public TweetAdapter01(Context context) { 90 super(context, android.R. 91 layout.simple_list_item_1); 92 mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 93 } 94 95 @Override 96 public View getView(int position, View convertView, ViewGroup parent) { 97 View view = mInflater.inflate(R.layout.list_item_searchsub, null); 98 if (convertView == null) { 99 convertView = mInflater.inflate(R.layout.list_item_searchsub, null); 100 } 101 102 Status item = getItem(position); 103 SmartImageView icon = (SmartImageView) convertView.findViewById(R.id.icon); 104 icon.setImageUrl(item.getUser().getProfileImageURL()); 105 Log.d("testItem",item.getUser().getProfileImageURL()); 106 TextView name = (TextView) convertView.findViewById(R.id.name); 107 name.setText(item.getUser().getName()); 108 TextView screenName = (TextView) convertView.findViewById(R.id.screen_name); 109 screenName.setText("@" + item.getUser().getScreenName()); 110 TextView text = (TextView) convertView.findViewById(R.id.text); 111 text.setText(item.getText()); 112 mSurfaceView = (SurfaceView) findViewById(R.id.surfaceview); 113 SmartImageView image1 = (SmartImageView) convertView.findViewById(R.id.image1); 114 SmartImageView image2 = (SmartImageView) convertView.findViewById(R.id.image2); 115 SmartImageView image3 = (SmartImageView) convertView.findViewById(R.id.image3); 116 SmartImageView image4 = (SmartImageView) convertView.findViewById(R.id.image4); 117 image1.setVisibility(INVISIBLE); 118 image2.setVisibility(INVISIBLE); 119 image3.setVisibility(INVISIBLE); 120 image4.setVisibility(INVISIBLE); 121 122 ExtendedMediaEntity[] mediaEntitys = item.getExtendedMediaEntities(); 123 124 125 List list = new ArrayList(); 126 for( int i = 0; i < mediaEntitys.length; i ++ ){ 127 ExtendedMediaEntity extendedMediaEntity = mediaEntitys[i]; 128 ExtendedMediaEntity.Variant[] variant = extendedMediaEntity.getVideoVariants(); 129 if (extendedMediaEntity.getType().equals("video")) { 130 list.add(variant[i].getUrl()); 131 } 132 else{list.add(extendedMediaEntity.getMediaURLHttps());} 133 } 134 135 136 String[] medias = ( String[] )list.toArray( new String[0] ); 137 for (int i=0;i < medias.length;i++) { 138 if(i==0) { 139 if (medias[i].contains("video")) { 140 141 mSurfaceView.setVisibility(VISIBLE); 142 // Windowを透明にする 143 getWindow().setFormat(PixelFormat.TRANSPARENT); 144 // SurfaceViewにコールバックを設定 145 path1 = null; 146 path1 = medias[i]; 147 mHolder = mSurfaceView.getHolder(); 148 mHolder.addCallback(mCallback); 149 150 } 151 // 152 else { 153 image1.setVisibility(VISIBLE); 154 image1.setImageUrl(medias[i]); 155 Log.d("test201804", medias[i]); 156 } 157 } 158 if(i==1){ 159 image2.setVisibility(VISIBLE); 160 image2.setImageUrl(medias[i]); 161 Log.d("test201804",medias[i]); 162 } 163 if(i==2){ 164 image3.setVisibility(VISIBLE); 165 image3.setImageUrl(medias[i]); 166 Log.d("test201804",medias[i]); 167 } 168 if(i==3){ 169 image4.setVisibility(VISIBLE); 170 image4.setImageUrl(medias[i]); 171 Log.d("test201804",medias[i]); 172 } 173 174 } 175 176 return convertView; 177 } 178 } 179 180 181 182 private final SurfaceHolder.Callback mCallback = new SurfaceHolder.Callback() { 183 184 185 /** SurfaceViewが生成された時に呼び出される */ 186 @Override 187 public void surfaceCreated(SurfaceHolder holder) { 188 // public final String path = "ファイルパスかURL"; 189 try { 190 191 // MediaPlayerを生成 192 mMediaPlayer = new MediaPlayer(); 193 // 動画ファイルをMediaPlayerに読み込ませる 194 // Log.d("mediaplayertest",path1); 195 196 mMediaPlayer.setDataSource(path1); 197 // 読み込んだ動画ファイルを画面に表示する 198 mMediaPlayer.setDisplay(holder); 199 mMediaPlayer.prepare(); 200 mMediaPlayer.setOnPreparedListener(new MediaPlayer. OnPreparedListener() { 201 @Override 202 public void onPrepared(MediaPlayer mp) { 203 mMediaPlayer.start(); 204 } 205 }); 206 // mMediaPlayer.start(); 207 } catch (IllegalArgumentException e) { 208 e.printStackTrace(); 209 210 } catch (SecurityException e) { 211 e.printStackTrace(); 212 213 } catch (IllegalStateException e) { 214 e.printStackTrace(); 215 216 } catch (IOException e) { 217 e.printStackTrace(); 218 219 } finally { 220 221 } 222 } 223 224 // 225 @Override 226 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 227 228 } 229 230 /** SurfaceViewが終了した時に呼び出される */ 231 @Override 232 public void surfaceDestroyed(SurfaceHolder holder) { 233 if (mMediaPlayer != null) { 234 mMediaPlayer.release(); 235 mMediaPlayer = null; 236 237 mSurfaceView.setVisibility(INVISIBLE); 238 path1 = null; 239 } 240 } 241 242 }; 243 244}

試したこと

・SurfaceView、mediaplayerではなくてvideoviewでも試しましたが
ほぼ同じ問題が起きました。

補足情報(FW/ツールのバージョンなど)

AndroidStudio3.4

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問