, если nUploadSize - длинное целое число ниже,
nUploadSize += currentline.getBytes().length;
Есть ли способ получить фактический размер байта, а не его длину? Если я попробую это:
nUploadSize += currentline.getBytes();
Он не принимает поговорку:
The operator += is undefined for the argument type(s) long, byte[]
Причина, по которой я задавал этот вопрос, заключается в том, что я пытаюсь загрузить httppost с диалоговым окном, отображающим прогресс в процентах. Проблема в том, что индикатор выполнения никогда не показывает какой-либо прогресс до того, как будет отображен тост успешного добавления
У меня есть следующий код:
boolean m_bSuccess = true; // initiating a boolean to be used later
try
{
//upload parameters done through multipartEntity
MultipartEntity me = new MultipartEntity();
File pFp = new File(strAttachedFile);
me.addPart("videoFile", new FileBody(pFp, "video/3gpp"));
httppost.setEntity(me);
// get the total size of the file
nTotalSize = pFp.length();
//httpPst execution
HttpResponse responsePOST = client.execute(httppost);
HttpEntity resEntity = responsePOST.getEntity();
//
InputStream inputstream = resEntity.getContent();//generate stream from post resEntity
BufferedReader buffered = new BufferedReader(new InputStreamReader(inputstream));//buffer initiated to read inputstream
StringBuilder stringbuilder = new StringBuilder();
String currentline = null;
while ((currentline = buffered.readLine()) != null)
{
// adding the
stringbuilder.append(currentline + "\n");// appending every line of upload to stringbuilder
String result = stringbuilder.toString();
nUploadSize += currentline.getBytes().length;// += upload size acquires all current line bites
//convert upload size from integer to string to be read
String s = String.valueOf(nUploadSize);
Log.i("Upload lineeeeeeeeeeeeeeeeee",s);
Log.v("HTTP UPLOAD REQUEST",result);
inputstream.close();}
}
catch (Exception e) {
e.printStackTrace();
m_bSuccess = false; //mbsucess is false on catch failure
}
publishProgress();
if(m_bSuccess)
return "success";
return null;
}
protected void onProgressUpdate(Integer... progress) {
if(m_vwProgress !=null){
m_vwProgress.setProgress((int)(nUploadSize/nTotalSize));
}
}
protected void onPostExecute(String result){
super.onPostExecute(result);
if(result==null){
if(m_vwProgress !=null)
m_vwProgress.dismiss();
Toast.makeText(m_activity, "Upload Successful", Toast.LENGTH_LONG).show();
}
}
}
При попытке загрузки во время моего Log.i("Upload lineeeeeeeeeeeeeeeeee",s)
; Он показывает, что максимальный размер байта, который я получаю из nUploadSize += currentline.getBytes().length;
, равен 200. Объясняя мою главную проблему, почему в диалоговом окне «Ход выполнения» никогда не отображается процент выполнения, потому что число слишком мало. Вот почему я пытался понять, получал ли я на самом деле размер строки в байтах. Если кто-нибудь знает, как это исправить, я буду благодарен.