Ich habe diesen Code machte diese JSON zum Download:gibt es eine bessere Möglichkeit, diesen Json abzurufen?
private void rxPublishProgress()
{
final OkHttpClient mOkHttpClient = new OkHttpClient();
final Request mRequest = new Request.Builder().url(AirportService.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();
String progress = "0";
subscriber.onNext(progress);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
byte[] data = new byte[1024];
long total = 0;
int count;
String line = null;
final int bufferSize = 1024;
boolean flag = false;
JSONObject jsonObject = null;
final char[] buffer = new char[bufferSize];
final StringBuilder out = new StringBuilder();
Reader in = new InputStreamReader(inputStream, "UTF-8");
for(;flag ==false ;)
{
count = in.read(buffer, 0, buffer.length);
if (count == -1)
{
progress = "100";
subscriber.onNext(progress);
flag = true;
}
else
{
out.append(buffer, 0, count);
// Log.d("out",out.toString());
total += count;
progress = String.valueOf(total * 100/len);
subscriber.onNext(progress);
}
}
inputStream.close();
// try parse the string to a JSON object
try
{
jsonObject = new JSONObject(out.toString());
}
catch (JSONException e)
{
e.printStackTrace();
}
Log.d("lengt",String.valueOf(jsonObject.length()));
subscriber.onCompleted();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).subscribeOn(Schedulers.newThread()).subscribe(new Subscriber<String>() {
@Override
public void onCompleted()
{
Log.d("Complete","complete");
}
@Override
public void onError(Throwable e)
{
}
@Override
public void onNext(final String progress) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run()
{
percentage.setText(progress+"%");
}
});
}
});
und es funktioniert, aber ich weiß nicht, wie diese JSON abrufen oder mit Gson zu konvertieren.
Ich muss den Prozentsatz des Downloads abrufen, weil es eine bestimmte Anforderung dieses Projekts ist, aber ich brauche auch das JSONObject oder die Liste. Wie könnte ich das tun?
Dank
Lo0ok in Retrofit 2 - es wird Ihnen sehr helfen, und es unterstützt die GSON-Konvertierung sehr einfach. –
@TassosBassoukos Ich kenne Retrofit2, ich habe eine Version leicht implementiert, aber ich brauche auch einen Prozentsatz des Herunterladens ... – nani