0

在解决了我之前的所有问题以运行代码以从 sdcard 中检索视频并在 GridView 中显示它们之后,我仍然看不到视频。我不知道我做错了什么,他们不会显示并且数组没有传递。

如果有人可以帮助我,请,因为我真的不知道出了什么问题...... :((谢谢......

这是尝试从 GridView 中的 sdcard 检索和显示视频的 java 文件:

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,

        };*/

    }   

}

强制关闭错误 - 问题已解决


应用程序消失 - 问题已解决


阵列问题 - 问题已解决

4

2 回答 2

1

成为班级vidUris的一员。EditGalleryView另外我认为 ArrayList 上有一个 toArray 方法,它将返回一个元素数组。

于 2010-07-16T13:11:42.423 回答
0

我也有同样的问题,解决方法也很简单,修改函数 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

于 2014-01-02T04:07:18.907 回答