2017-08-06 111 views
-1

我有一个机器人录像机,其显示与名称和文件大小的SD卡上的所有视频,但显示的字节大小,我一直无法将其转换为KB,MB,GB等。我试图用1024除以int值,但它不工作,它打印错误的值。谁能帮忙?不能字节转换为KB

SDVideos.java

import android.app.Activity; 
import android.content.ContentResolver; 
import android.content.Context; 
import android.database.Cursor; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.TextView; 

import java.text.DecimalFormat; 

public class SDVideos extends Activity 
{ 
    private Cursor videoCursor; 
    int videoColumnIndex; 
    ListView videolist; 
    int count; 

    String[] thumbColumns = { MediaStore.Video.Thumbnails.DATA,MediaStore.Video.Thumbnails.VIDEO_ID }; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_sdvideos); 
     initialization(); 
    } 

    private void initialization() 
    { 
     System.gc(); 
     String[] videoProjection = { MediaStore.Video.Media._ID,MediaStore.Video.Media.DATA, 
       MediaStore.Video.Media.DISPLAY_NAME,MediaStore.Video.Media.SIZE }; 
     videoCursor =getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,videoProjection, null, null, null); 
     count = videoCursor.getCount(); 
     videolist = (ListView) findViewById(R.id.PhoneVideoList); 

     videolist.setAdapter(new VideoListAdapter(this.getApplicationContext())); 
     videolist.setOnItemClickListener(videogridlistener); 
    } 

    private AdapterView.OnItemClickListener videogridlistener = new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView parent, View v, int position, long id) 
     { 
      videoColumnIndex = videoCursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA); 
      videoCursor.moveToPosition(position); 
      String filename = videoCursor.getString(videoColumnIndex); 
      Log.i("FileName: ", filename); 
//Intent intent = new Intent(VideoActivity.this, ViewVideo.class); 
//intent.putExtra("videofilename", filename); 
//startActivity(intent); 
     }}; 

    public class VideoListAdapter extends BaseAdapter 
    { 
     private Context vContext; 

     public VideoListAdapter(Context c) 
     { 
      vContext = c; 
     } 

     public int getCount() 
     { 
      return videoCursor.getCount(); 
     } 

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

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

     public View getView(int position, View convertView, ViewGroup parent) 
     { 
      View listItemRow; 
      listItemRow = LayoutInflater.from(vContext).inflate(R.layout.listitem, parent, false); 

      TextView txtTitle = (TextView)listItemRow.findViewById(R.id.txtTitle); 
      TextView txtSize = (TextView)listItemRow.findViewById(R.id.txtSize); 
      ImageView thumbImage = (ImageView)listItemRow.findViewById(R.id.imgIcon); 

      videoColumnIndex = videoCursor.getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME); 
      videoCursor.moveToPosition(position); 
      txtTitle.setText(videoCursor.getString(videoColumnIndex)); 

      videoColumnIndex = videoCursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE); 
      videoCursor.moveToPosition(position); 
      txtSize.setText(" Size(KB):" + (videoCursor.getString(videoColumnIndex/205870))); 


      int videoId = videoCursor.getInt(videoCursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID)); 
      ContentResolver crThumb = getContentResolver(); 
      BitmapFactory.Options options=new BitmapFactory.Options(); 
      options.inSampleSize = 1; 
      Bitmap curThumb = MediaStore.Video.Thumbnails.getThumbnail(crThumb, videoId, MediaStore.Video.Thumbnails.MICRO_KIND, options); 
      thumbImage.setImageBitmap(curThumb); 
      return listItemRow; 
     } 
    } 

} 

列表项。 XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="10dp"> 

    <ImageView android:id="@+id/imgIcon" 
     android:layout_width="90dip" 
     android:layout_height="90dip" 
     android:paddingLeft="10dip" 
     android:paddingRight="10dip"/> 

    <LinearLayout 
     android:id="@+id/linearLayout1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:layout_marginRight="10dip"> 

     <TextView android:id="@+id/txtTitle" 
      android:layout_width="250dip" 
      android:layout_height="wrap_content" 
      android:gravity="left" 
      android:textStyle="normal" 
      android:textSize="15dp" 
      android:textColor="#FF0000" 
      android:paddingTop="30dp" 
      android:paddingLeft="20dp" 
      android:layout_marginTop="5dp" 
      android:layout_marginBottom="5dp" /> 

     <TextView android:id="@+id/txtSize" 
      android:layout_width="250dip" 
      android:layout_height="wrap_content" 
      android:gravity="right" 
      android:paddingRight="20dp" 
      android:paddingTop="20dp" 
      android:textStyle="italic" 
      android:textSize="12dp" 
      android:textColor="#00FF00" /> 
    </LinearLayout> 
</LinearLayout> 
+0

如果你可以1做到这一点,通过你的清单,只是循环转换为所有 –

+0

我可以没有做到这一点,我使用mediastore用于获取文件的大小以字节为单位 –

+0

是什么重要的价值:'205870'在你的代码? – selbie

回答

2

你可先用长度方法来获取文件的大小。然后做这种方式 -

videoColumnIndex = videoCursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE); 

long fileSizeInBytes = videoCursor.getLong(videoColumnIndex) 
// Convert the bytes to Kilobytes (1 KB = 1024 Bytes) 
long fileSizeInKB = fileSizeInBytes/1024; 
// Convert the KB to MegaBytes (1 MB = 1024 KBytes) 
long fileSizeInMB = fileSizeInKB/1024; 
+0

我不能做类似的使用MediaStore.Video.Media.DATA的东西吗? –

+0

是不是你得到的大小在你的代码在下面的线 - txtSize.setText( “大小(KB):” +(videoCursor.getString(videoColumnIndex/205870))); –

+0

我得到的大小,以字节为单位,但由1024除以videcolumnindex给出了错误的值 –

0

我想你应该键入从int投输出浮动,因为当你把小于1024字节数与1024它可以让你以KB为单位输出0kb.similary的情况下, MB的和GB的

+0

但它不给我0 KB even..it只是给了我同样数量的每一次,不管用哪个号码我把 –

1

的你必须通过1024字节除以1024,让他们以KB为单位,除以KB 1024获得MB和鸿沟MB到GB获取等。

如:

long kilobytes = file.length()/1024; 
long megabytes = kilobytes/1024; 
long gigabytes = megabytes/1024;