Мне нужно загрузить Json-файл с 20k-элементами, и в то же время мне нужно показать процент в текстовом виде. Теперь я проверяю только поток кода, поэтому я показываю простой журнал с текущим процентом. Поэтому я создать Observable и я делаю это:Как получить JsonReader байт, чтобы сделать процент
private void downloadAirports()
{
final OkHttpClient mOkHttpClient = new OkHttpClient();
final Request mRequest = new Request.Builder().url(SERVICE_ENDPOINT).build();
Observable.create(new Observable.OnSubscribe<String>()
{
@Override
public void call(Subscriber<? super String> subscriber)
{
try {
InputStream inputStream;
okhttp3.Response response = mOkHttpClient.newCall(mRequest).execute();
if (response.isSuccessful())
{
inputStream = response.body().byteStream();
long len = response.body().contentLength();
Log.d("str",String.valueOf(len));
String progress = "0";
subscriber.onNext(progress);
final int bufferSize = 1024;
boolean flag = false;
final char[] buffer = new char[bufferSize];
final StringBuilder out = new StringBuilder();
Reader in = new InputStreamReader(inputStream, "UTF-8");
long total = 0;
airp = new ArrayList<AirportObject>();
int count =0;
Gson gson = new Gson();
JsonReader reader = new JsonReader(new InputStreamReader(inputStream, "UTF-8"));
airp = new ArrayList<>();
long i = 0;
reader.beginArray();
while (reader.hasNext())
{
AirportObject message = gson.fromJson(reader, AirportObject.class);
airp.add(message);
i++;
byte [] arr = message.toString().getBytes();
total = total + arr.length;
Log.d("%",String.valueOf(total));
double p = total/len * 100;
subscriber.onNext(String.valueOf(p));
}
reader.endArray();
reader.close();
//airp = Arrays.asList(airportArray);
subscriber.onCompleted();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).subscribeOn(Schedulers.newThread())
.subscribe(new Subscriber<String>() {
long size, perc;
public void onCompleted()
{
Log.wtf("on complete","On complete");
}
@Override
public void onError(Throwable e)
{
e.printStackTrace();
}
@Override
public void onNext(final String progress) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run()
{
// Log.d("%",progress);
// textView.setText("Download aeroporti in corso:"+progress+"%");
}
});
}
});
}
но я даю два различных значения переменной LEN (эффективное количество байт) и переменной общего. Итак, как я могу получить значение эффективного байта, загруженного из JsonReader во время цикла?
Благодаря