Видео не отображается в GridView - PullRequest
0 голосов
/ 16 июля 2010

После того, как я решил все мои предыдущие проблемы, чтобы запустить код для извлечения видео с SDCard и отображения их в GridView, я все еще не могу видеть видео. Я не знаю, что я сделал неправильно, что они не будут отображаться, и массив не передается.

Если кто-то может мне помочь, пожалуйста, потому что я действительно не понимаю, что не так ...: ((Спасибо ...

Это Java-файл, который пытается получить и отобразить видео с SD-карты в GridView:

package com.mobilevideoeditor.moved;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.VideoView;




public class EditGalleryView extends Activity {
    Uri[] vidUris;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.videogrid);

        GridView vGrid=(GridView) findViewById(R.id.vgrid);
        vGrid.setAdapter(new VideoAdapter(this));

        Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;

        Log.d("EditGalleryView", "uri:"+uri);
        String[] projection = {
                MediaStore.Video.Media.DESCRIPTION,
                MediaStore.Video.Media.DATA  
    };

        Cursor c = this.managedQuery(uri, projection, null, null,
                MediaStore.Video.Media.DATE_ADDED);
                         Log.d("EditGalleryView", "vids available:" +c.getCount());

                         ArrayList<Uri> experimentVids = new ArrayList<Uri>();


                             if (c.getCount() != 0) {
                                 c.moveToFirst();
                                 experimentVids.add(Uri.parse(c.getString(1)));
                                 while (c.moveToNext()) {
                                         experimentVids.add(Uri.parse(c.getString(1)));

                                  }
                      }
                             Log.d("ClassName", "experimentVids.length:" +experimentVids.size());
                                                  if (experimentVids.size() != 0) {
                                                    vidUris = new Uri[experimentVids.size()];
                                                      for (int i = 0; i < experimentVids.size(); i++) {
                                                          vidUris[i] = experimentVids.get(i);
                                                      }
                                                      Log.d("EditGalleryView", "vidUris:"+vidUris.length);
                                                  }
                                              }


    public class VideoAdapter extends BaseAdapter {
        private Context mContext;

        public VideoAdapter(Context c) {
            mContext = c;
        }

        public int getCount() {
            //return mThumbIds.length;
           if(vidUris!=null){
            return vidUris.length;}
        return 0;
        }


        public Object getItem(int position) {
            //return null;
            return position;
        }

        public long getItemId(int position) {
            //return 0;
            return position;
        }

        // create a new ImageView for each item referenced by the Adapter
        public View getView(int position, View convertView, ViewGroup parent) {
           VideoView videoView;
            if (convertView == null) {  // if it's not recycled, initialize some attributes
                videoView = new VideoView(mContext);
                videoView.setVideoURI(vidUris[position]);
                videoView.setLayoutParams(new GridView.LayoutParams(85, 85));
               //videoView.setScaleType(VideoView.ScaleType.CENTER_CROP);
                videoView.setPadding(8, 8, 8, 8);
            } else {
                videoView = (VideoView) convertView;
            }

          //  imageView.setImageResource(mThumbIds[position]);
            return videoView;
        }

       /* // references to our images
        private Integer[] mThumbIds = {
                R.drawable.sample_2, R.drawable.sample_3,
                R.drawable.sample_4, R.drawable.sample_2,
                R.drawable.sample_6, R.drawable.sample_3,
                R.drawable.sample_4, R.drawable.sample_1,

        };*/

    }   

}

Ошибка принудительного закрытия - проблема решена


Исчезновение приложения - проблема решена


Проблема с массивом - проблема решена

Ответы [ 2 ]

1 голос
/ 16 июля 2010

Сделать vidUris членом класса EditGalleryView.Также я думаю, что в ArrayList есть метод toArray, который возвращает массив элементов.

0 голосов
/ 02 января 2014

У меня тот же вопрос, и решение тоже простое, просто измените функцию public View getView (int position, View convertView, ViewGroup parent), как показано ниже:

    public View getView(int position, View convertView, ViewGroup parent) {
        VideoView videoView;
        if (convertView == null) { // if it's not recycled, initialize some
                                    // attributes
            videoView = new VideoView(mContext);
            videoView.setFocusable(true);
            videoView.setVideoURI(vidUris[position]);
            videoView.setLayoutParams(new GridView.LayoutParams(160, 120));
            // videoView.setScaleType(VideoView.ScaleType.CENTER_CROP);
            videoView.setPadding(8, 8, 8, 8);
            videoView.start();
        } else {
            videoView = (VideoView) convertView;
            videoView.start();
        }

        // imageView.setImageResource(mThumbIds[position]);
        return videoView;
    }

и теперь вы можете заменить функцию приведенным выше кодом и запустить, чтобы увидеть, все ли в порядке, она работает нормально на моем устройстве huawei c8815 ​​с правами root

...