2017-08-06 109 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;