2013-09-13 3 views
1

У меня возникли проблемы с отображением миниатюр в списке. Путь к файлу рядом с изображением работает, но не миниатюра. Вот мой код:Видеоролики в списке

MainActivity.java:

public class MainActivity extends ListActivity{ 

File path = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Videos/"); 

String[] videoFileList = path.list(); 

public class MyThumbnaildapter extends ArrayAdapter<String>{ 

    public MyThumbnaildapter(Context context, int textViewResourceId, 
      String[] objects) { 
     super(context, textViewResourceId, objects); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 

     View row = convertView; 
     if(row==null){ 
      LayoutInflater inflater=getLayoutInflater(); 
      row=inflater.inflate(R.layout.row, parent, false); 
     } 

     TextView textfilePath = (TextView)row.findViewById(R.id.FilePath); 
     textfilePath.setText(videoFileList[position]); 
     ImageView imageThumbnail = (ImageView)row.findViewById(R.id.Thumbnail); 

     Bitmap bmThumbnail; 
     bmThumbnail = ThumbnailUtils.createVideoThumbnail(videoFileList[position], Thumbnails.MINI_KIND); 
     imageThumbnail.setImageBitmap(bmThumbnail); 

     return row; 
    } 

} 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setListAdapter(new MyThumbnaildapter(MainActivity.this, R.layout.row, videoFileList)); 
} 

}

Мой row.xml файл:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="horizontal"> 
<ImageView 
android:id="@+id/Thumbnail" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:src="@drawable/icon"/> 
<TextView 
android:id="@+id/FilePath" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"/> 
</LinearLayout> 

Путь к файлу отображается правильно, но не изображение. Я подозреваю, что проблема как-то в моем row.xml, но ошибок нет. Если я направляю его только на 2 видео, которые я вручную установил для этого пути, используя две уникальные строки, он отлично работает. Спасибо за вашу помощь!

+0

Я уверен, что u не получает путь к файлу, который вы получаете, является filename –

ответ

1

Вы уверены, что у нас есть видео с файлами, а не видео? Я думаю, что вы получаете видео-имя, потому что в массиве videoFileList вы сохраняете строку, которая появляется после «/ Videos /». Это означает, что вы не сохраняете путь, а файл, который находится в папке «видео». Чтобы получить эскиз, вам понадобится путь к файлу, а не имя файла. Чтобы получить видео только из папки видео, вы можете использовать coursor вот так.

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     final String[] proj = { MediaStore.Video.Media.DATA }; 
     String folder="bluetooth"; 
    Cursor cursor = managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, 
      proj, MediaStore.Video.Media.DATA + " like ? ", 
      new String[] { "%" + folder + "%" }, null); 
    videopath=new ArrayList<String>(); 
    while (cursor.moveToNext()) { 

      videopath.add(cursor.getString(0)); 
     } 
     setListAdapter(new MyThumbnaildapter(AndroidThumbnailList.this, R.layout.row, videopath)); 
    } 
} 

и modefy ваш код таким образом

1.

public MyThumbnaildapter(Context context, int textViewResourceId, 
     String[] objects) { 
    super(context, textViewResourceId, objects); 

Заменить ниже

public MyThumbnaildapter(Context context, int textViewResourceId, 
      ArrayList<String> videopath) { 
super(context, textViewResourceId, videopath); 

2.

videoFileList[position] 

Заменяйте с

videopath.get(position) 

Update: Если расширение файла не типа видео, то приведенный выше код будет давать ошибки так обновить OnCreate

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     videopath=new ArrayList<String>(); 
     File path = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/bluetooth/"); 
     File[] files = path.listFiles(); 
     for(File f : files){ 


        String absPath = f.getAbsolutePath(); 
        videopath.add(absPath); 


     } 

     setListAdapter(new MyThumbnaildapter(AndroidThumbnailList.this, R.layout.row, videopath)); 
    } 

}

Обновленный код заполнить все файлы, находящиеся в папке Bluetooth, видео и не-видео, и вернуть миниатюру для видео.

+0

Вы правы, это имя файла появляется. В вашем коде есть путь к строке «папка»? Я получаю fe w ошибок. Чтобы уточнить, эти видео в настоящее время не находятся в галерее, потому что когда они будут загружены, у них будет расширение без видео. – user2420837

0

Не могли бы вы проверить, не создано ли уменьшенное изображение NULL или нет. В соответствии с документированием говорится:

Создать видео thumbnail для видео. Может возвращать null, если видео повреждено или формат не поддерживается.

+0

Хорошо, но он работает с точными видеороликами, когда я вручную устанавливаю путь? – user2420837

+0

Pls отправляет путь. Может быть, он не сможет добраться до файла. – prijupaul

+0

Путь - sdcard/Видео /. Он достигает файла штрафа, потому что имя файла отображается правильно. – user2420837

Смежные вопросы