2016-11-03 25 views
0

我有这样的代码:当我通过改造下载时,可以添加一个百分比吗?

Retrofit retrofit = new Retrofit.Builder() 
        .addConverterFactory(GsonConverterFactory.create()) 
        .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 
        .baseUrl(GithubService.SERVICE_ENDPOINT).build(); 

      GithubService service = retrofit.create(GithubService.class); 

      service.getAirport() 
        .subscribeOn(Schedulers.newThread()) 
        .observeOn(AndroidSchedulers.mainThread()) 
        .subscribe(new Subscriber<List<Airport>>() { 
         List<Airport> airps = new ArrayList<Airport>(); 

         @Override 
         public void onCompleted() { 
          for(final Airport air : airps) { 
           realm.executeTransactionAsync(new Realm.Transaction() { 
            @Override 
            public void execute(Realm mRealm) { 
             AirportR airport = mRealm.createObject(AirportR.class); 
             airport.setId(air.getId()); 
            } 
           }, new Realm.Transaction.OnSuccess() { 
            @Override 
            public void onSuccess() { 
             Log.wtf("ok", "ok"); 
            } 
           }, new Realm.Transaction.OnError() { 
            @Override 
            public void onError(Throwable error) { 
             Log.e("ok", "non vaaa"); 
            } 
           }); 
          } 
         } 

         @Override 
         public void onError(Throwable e) { 
          e.printStackTrace(); 
         } 

         @Override 
         public void onNext(List<Airport> airports) { 
          airps = airports; 
         } 
        }); 
     } 
    }); 

,我需要把下载的百分比,因为机场有如此much..and所以我想提出一个TextView下载的百分比(和我不知道如何在onNext()方法中做到这一点)以及在机场添加的领域百分比... 这是可能做到的吗?

感谢

+1

你应该明白,RxJava不是一个网络库,它不能下载任何东西。你用改造来做。你应该问一下改造。 –

+0

@VladMatvienko对不起,我在RxJava改造的开始...我编辑了这个问题..谢谢 – ste9206

回答

1

我用这个函数来显示下载进度,通过rxjava和okhttp结合起来,希望它帮助。

private void initOkHttpClient() { 
    mOkHttpClient = new OkHttpClient(); 
    mRequest = new Request.Builder().url(URL_JSON).build(); 
} 

private void rxPublishProgress() { 
    mProgressDialog = new ProgressDialog(this); 
    mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
    mProgressDialog.setMax(100); 
    mProgressDialog.setCancelable(true); 
    mProgressDialog.show(); 

    mRequest = new Request.Builder().url(URL_IMAGE).build(); 

    Observable.create(new Observable.OnSubscribe<String>() { 
     @Override 
     public void call(Subscriber<? super String> subscriber) { 
      try { 
       InputStream inputStream; 
       Response response = mOkHttpClient.newCall(mRequest).execute(); 
       if (response.isSuccessful()) { 
        inputStream = response.body().byteStream(); 
        long len = response.body().contentLength(); 

        String progress = "0"; 
        subscriber.onNext(progress); 

        byte[] data = new byte[1024]; 
        long total = 0; 
        int count; 
        while ((count = inputStream.read(data)) != -1) { 
         total += count; 
         progress = String.valueOf(total * 100/len); 
         subscriber.onNext(progress); 
        } 

        inputStream.close(); 
        subscriber.onCompleted(); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    }).subscribeOn(Schedulers.newThread()).subscribe(new Subscriber<String>() { 
     @Override 
     public void onCompleted() { 
      LogUtils.d("onCompleted"); 
      mProgressDialog.dismiss(); 
     } 

     @Override 
     public void onError(Throwable e) { 
      LogUtils.d(e.toString()); 
      mProgressDialog.dismiss(); 
     } 

     @Override 
     public void onNext(final String progress) { 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        mProgressDialog.setProgress(Integer.parseInt(progress)); 
       } 
      }); 
     } 
    }); 
} 
+0

你没有使用retrofit2,当然? – ste9206

+0

刚刚添加了init okhttp函数,翻新也用okhttp,在其他方面,它只是okhttp和gson imo的包装。 – linhtruong

+0

以及如何在下载的文件后使用? – ste9206

相关问题