[JAVA] J'ai une question. Une erreur se produit lors de la lecture d'une vidéo dans Listview avec Android.

Je crée une application Android avec java dans le studio Android. C'est une application qui affiche des tweets à environ 10 km lorsque vous appuyez sur google map. problème Je souhaite afficher une vidéo lors de l'affichage des tweets acquis dans Listview. ・ La vidéo est affichée même si ce n'est pas le tweet correspondant ・ Goutte lors de l'affichage d'une vidéo -La vidéo n'est pas lue même si la vue de liste est renvoyée. Le problème se pose. Je lis une vidéo en utilisant SurfaceView et Mediaplayer. Merci pour la solution.

Le code suivant public class MapsSubActivity extends ListActivity {

private TweetAdapter01 mAdapter;
private Twitter mTwitter;
public SurfaceView mSurfaceView;
public SurfaceHolder mHolder;
public MediaPlayer mMediaPlayer;
public String path1 = "";
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mAdapter = new TweetAdapter01(this);
    reloadTimeLine();
    setListAdapter(mAdapter);
}


private void reloadTimeLine() {
    AsyncTask<Void, Void, List<Status>> task = new AsyncTask<Void, Void, List<twitter4j.Status>>() {

//経度緯度の受け渡し Intent intent = getIntent(); String strLat = intent.getStringExtra ("strLat"); // Mot exclu String strLong = intent.getStringExtra ("strLong"); // Spécifier le compte double dLat = Double.parseDouble(strLat); double dLong = Double.parseDouble(strLong);

        public final String API_KEY = "XXXXXXX";
        public final String API_SECRET = "XXXXXXX";
        public final String ACCESS_TOKEN = "XXXXXXX";
        public final String ACCESS_TOKEN_SECRET = "XXXXXXX";

        @Override
        protected List<twitter4j.Status> doInBackground(Void... params) {
            try {


                String strQuery = null;
                Twitter tw = new TwitterFactory().getInstance();
                tw.setOAuthConsumer(API_KEY, API_SECRET);
                AccessToken at = new AccessToken(ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
                tw.setOAuthAccessToken(at);
                ArrayList<twitter4j.Status> list = new ArrayList<twitter4j.Status>();
                Query query = new Query();                  
                    query.setCount(100);
                    GeoLocation geo = new GeoLocation(dLat, dLong);
                    query.setGeoCode(geo, 10.0, Query.KILOMETERS);
                    query.setQuery(strQuery);
                    QueryResult result = tw.search(query);
                    String str = String.valueOf(result.getCount());

                    for (twitter4j.Status tweet : result.getTweets()) {
                        list.add(tweet);
                    }
                    if (result.hasNext()) {
                        query = result.nextQuery();
                    } 
                return list;
            } catch(TwitterException e){
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(List<twitter4j.Status> result) {
            if (result != null) {
                mAdapter.clear();
                for (twitter4j.Status status : result) {
                    mAdapter.add(status);
                    Log.d("testE","zoku");
                }
                getListView().setSelection(0);
            } else {
            }
        }
    };
    task.execute();
}

private class TweetAdapter01 extends ArrayAdapter<Status> {

    private LayoutInflater mInflater;

    public TweetAdapter01(Context context) {
        super(context, android.R.
                layout.simple_list_item_1);
        mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = mInflater.inflate(R.layout.list_item_searchsub, null);
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.list_item_searchsub, null);
        }

        Status item = getItem(position);
        SmartImageView icon = (SmartImageView) convertView.findViewById(R.id.icon);
        icon.setImageUrl(item.getUser().getProfileImageURL());
        Log.d("testItem",item.getUser().getProfileImageURL());
        TextView name = (TextView) convertView.findViewById(R.id.name);
        name.setText(item.getUser().getName());
        TextView screenName = (TextView) convertView.findViewById(R.id.screen_name);
        screenName.setText("@" + item.getUser().getScreenName());
        TextView text = (TextView) convertView.findViewById(R.id.text);
        text.setText(item.getText());
        mSurfaceView = (SurfaceView) findViewById(R.id.surfaceview);
        SmartImageView image1 = (SmartImageView) convertView.findViewById(R.id.image1);
        SmartImageView image2 = (SmartImageView) convertView.findViewById(R.id.image2);
        SmartImageView image3 = (SmartImageView) convertView.findViewById(R.id.image3);
        SmartImageView image4 = (SmartImageView) convertView.findViewById(R.id.image4);
        image1.setVisibility(INVISIBLE);
        image2.setVisibility(INVISIBLE);
        image3.setVisibility(INVISIBLE);
        image4.setVisibility(INVISIBLE);

        ExtendedMediaEntity[] mediaEntitys = item.getExtendedMediaEntities();


        List list = new ArrayList();
        for( int i = 0; i < mediaEntitys.length; i ++ ){
            ExtendedMediaEntity extendedMediaEntity = mediaEntitys[i];
            ExtendedMediaEntity.Variant[] variant = extendedMediaEntity.getVideoVariants();
            if (extendedMediaEntity.getType().equals("video")) {
                    list.add(variant[i].getUrl());
            }
            else{list.add(extendedMediaEntity.getMediaURLHttps());}
        }


        String[] medias = ( String[] )list.toArray( new String[0] );
        for (int i=0;i < medias.length;i++) {
            if(i==0) {
                if (medias[i].contains("video")) {

                    mSurfaceView.setVisibility(VISIBLE);

// Rendre la fenêtre transparente getWindow().setFormat(PixelFormat.TRANSPARENT); // Définir le rappel sur SurfaceView path1 = null; path1 = medias[i]; mHolder = mSurfaceView.getHolder(); mHolder.addCallback(mCallback);

                }
                //
                else {
                    image1.setVisibility(VISIBLE);
                    image1.setImageUrl(medias[i]);
                    Log.d("test201804", medias[i]);
                }
            }
            if(i==1){
                image2.setVisibility(VISIBLE);
                image2.setImageUrl(medias[i]);
                Log.d("test201804",medias[i]);
            }
            if(i==2){
                image3.setVisibility(VISIBLE);
                image3.setImageUrl(medias[i]);
                Log.d("test201804",medias[i]);
            }
            if(i==3){
                image4.setVisibility(VISIBLE);
                image4.setImageUrl(medias[i]);
                Log.d("test201804",medias[i]);
            }

        }

        return convertView;
    }
}



private final SurfaceHolder.Callback mCallback = new SurfaceHolder.Callback() {

/ ** Appelé lors de la création de SurfaceView * / @Override public void surfaceCreated(SurfaceHolder holder) { // public final String path = "chemin du fichier ou URL"; try {

// Générer un lecteur multimédia mMediaPlayer = new MediaPlayer(); // Charge le fichier vidéo dans Media Player // Log.d("mediaplayertest",path1);

            mMediaPlayer.setDataSource(path1);

// Afficher le fichier vidéo chargé à l'écran mMediaPlayer.setDisplay(holder); mMediaPlayer.prepare(); mMediaPlayer.setOnPreparedListener(new MediaPlayer. OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mMediaPlayer.start(); } }); // mMediaPlayer.start(); } catch (IllegalArgumentException e) { e.printStackTrace();

        } catch (SecurityException e) {
            e.printStackTrace();

        } catch (IllegalStateException e) {
            e.printStackTrace();

        } catch (IOException e) {
            e.printStackTrace();

        } finally {

        }
    }

    //
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

    }

/ ** Appelé lorsque SurfaceView est fermé * / @Override public void surfaceDestroyed(SurfaceHolder holder) { if (mMediaPlayer != null) { mMediaPlayer.release(); mMediaPlayer = null;

            mSurfaceView.setVisibility(INVISIBLE);
            path1 = null;
        }
    }

};

}

Recommended Posts

J'ai une question. Une erreur se produit lors de la lecture d'une vidéo dans Listview avec Android.
J'obtiens une erreur lors de l'ajout d'une dépendance
Je n'ai trouvé aucun moyen d'obtenir le code d'erreur lorsque j'ai reçu une exception sur Android
J'ai une question sur le studio Android.
Une erreur 404 se produit lors du test de l'authentification par formulaire avec Spring Security
J'obtiens une erreur de version de Ruby lorsque j'essaye de démarrer Rails.
[Android] Je souhaite obtenir l'auditeur à partir du bouton de ListView
[Visual Studio Code] J'obtiens une erreur de syntaxe lors de l'exécution du débogage lors de l'utilisation de rbenv
Je souhaite afficher un message d'erreur lors de l'inscription dans la base de données
J'ai créé une application de calculatrice sur Android
Un rappel lorsqu'une erreur aapt.exe se produit
Après avoir renouvelé le certificat avec CircleCI × fastlane, j'obtiens un état de sortie: erreur 65.
Débutant: j'obtiens une erreur à la ligne 30. Je ne sais pas où le réparer.
(Capistrano) Après le déploiement, j'obtiens une erreur Désolé ... dans l'environnement de production.
Lors de l'utilisation d'une liste en Java, java.awt.List sort et une erreur se produit
[Ruby on Rails] J'obtiens un avertissement lors de l'exécution de RSpec car gem'chromedriver-helper 'est obsolète.
J'ai eu une erreur en essayant d'installer sbt pour créer un environnement de développement Scala
Une note sur "Ne pas émettre une erreur de certificat avec un certificat auto-signé à l'aide de Keytool Java"
J'ai essayé d'utiliser une connexion à une base de données dans le développement Android
J'obtiens Mysql2 :: Error :: ConnectionError dans l'environnement de production
J'ai un symbole de résolution impossible dans Android Studio
J'ai eu une erreur "méthode non définie` create" "dans RSpec
Quand je bcrypt avec node + docker, j'ai une erreur
J'ai créé une bibliothèque pour afficher des tutoriels sur Android.
Ce que j'ai appris lors de la création d'un serveur en Java
J'ai une question sur la saisie de chiffres au clavier
[Ruby on Rails] J'obtiens un avertissement lors de l'exécution de RSpec en raison d'une version différente de gem.
[Android] Pourquoi une erreur de version de conflit se produit lors du chargement d'une bibliothèque du côté de l'application Android