有没有更好的方法来检索这个Json?
我编写了以下代码来下载此JSON:有没有更好的方法来检索这个Json?,json,rx-java,android,gson,Json,Rx Java,Android,Gson,我编写了以下代码来下载此JSON: private void rxPublishProgress() { final OkHttpClient mOkHttpClient = new OkHttpClient(); final Request mRequest = new Request.Builder().url(AirportService.SERVICE_ENDPOINT).build(); Observable.create(new Observable.OnSub
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+"%");
}
});
}
});
private void rxPublishProgress()
{
最终OkHttpClient mOkHttpClient=新OkHttpClient();
final Request mRequest=new Request.Builder().url(AirportService.SERVICE_ENDPOINT.build();
创建(新的Observable.OnSubscribe()
{
@凌驾
公共无效呼叫(订户如我所知,您有1个可观察到的
,您需要:
1) 显示百分比
2) 做点别的
所以你可以这样做:
Observable<okhttp3.Response> responseObservable = Observable.create(/*your code to return response*/)
.subscribeOn(Schedulers.newThread())
.replay(1)
.refCount();
responseObservable
.map(toPercents())
.subscribe(displayPercents());
responseObservable
.map(toSomethingElse())
.subscribe(displaySomethingElse());
Observable responseObservable=Observable.create(/*返回响应的代码*/)
.subscribeOn(Schedulers.newThread())
.重播(1)
.refCount();
可观测响应
.map(toPercents())
.订阅(显示百分比());
可观测响应
.map(toSomethingElse())
.subscribe(displaySomethingElse());
如我所知,您有1个可观察的,您需要:
1) 显示百分比
2) 做点别的
所以你可以这样做:
Observable<okhttp3.Response> responseObservable = Observable.create(/*your code to return response*/)
.subscribeOn(Schedulers.newThread())
.replay(1)
.refCount();
responseObservable
.map(toPercents())
.subscribe(displayPercents());
responseObservable
.map(toSomethingElse())
.subscribe(displaySomethingElse());
Observable responseObservable=Observable.create(/*返回响应的代码*/)
.subscribeOn(Schedulers.newThread())
.重播(1)
.refCount();
可观测响应
.map(toPercents())
.订阅(显示百分比());
可观测响应
.map(toSomethingElse())
.subscribe(displaySomethingElse());
Lo0ok进入改型2-这将对您有很大帮助,而且它确实非常容易支持GSON转换。@TassosBassoukos我知道改型2,我很容易实现了一个版本,但我还需要下载一定比例的内容…Lo0ok进入改型2-这将对您有很大帮助,而且它确实非常容易支持GSON转换。@TassosBassoukos我知道改型2,我已经实现了一个版本很容易,但我还需要下载的百分比。。。