有没有更好的方法来检索这个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

我编写了以下代码来下载此JSON:

 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,我已经实现了一个版本很容易,但我还需要下载的百分比。。。