2017-02-17 4 views
1

Я использую несколько фрагментов в активности с вкладками, чтобы показать данные json.
Я хочу показать индикатор выполнения всякий раз, когда ответ получен в каждом фрагменте.Retrofit 2 - Как показать индикатор выполнения при получении ответа JSON

private void loadJSON() { 
 
    Retrofit retrofit = new Retrofit.Builder() 
 
    .baseUrl(BASEURL) 
 
    .addConverterFactory(GsonConverterFactory.create()) 
 
    .build(); 
 
    newsAPI = retrofit.create(NewsAPI.class); 
 
    Call <JSONResponse> call = 
 
    newsAPI.topNews("soure", "api-key"); 
 

 
    call.enqueue(new Callback <JSONResponse>() { 
 

 
     @Override 
 
     public void onResponse(Call <JSONResponse> call, Response <JSONResponse> response) { 
 

 
     Log.v("this", "Yes!"); 
 
     } 
 
    } 
 

 
    @Override public void onFailure(Call <JSONResponse> call, Throwable t) { 
 
     Log.v("this", "No Response!"); 
 
    } 
 
    });

+0

попытался показать индикатор выполнения, пропустив его через xml, но не смог –

+0

@LucaNicoletti Я хочу показать индикатор прогресса, а не диалог прогресса? Является ли это возможным? –

+0

Вы уже приняли ответ. Отправьте еще один, если вы хотите другое решение. –

ответ

7

С чем-то вроде этого, используя progressDialog:

private void loadJSON() { 
     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl(BASEURL) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 
     newsAPI = retrofit.create(NewsAPI.class); 
     Call <JSONResponse> call = 
       newsAPI.topNews("soure", "api-key"); 

     // Set up progress before call 
     final ProgressDialog progressDoalog; 
     progressDoalog = new ProgressDialog(MainActivity.this); 
     progressDoalog.setMax(100); 
     progressDoalog.setMessage("Its loading...."); 
     progressDoalog.setTitle("ProgressDialog bar example"); 
     progressDoalog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     // show it 
     progressDoalog.show(); 

     call.enqueue(new Callback <JSONResponse>() { 

      @Override 
      public void onResponse(Call <JSONResponse> call, Response <JSONResponse> response) { 
       // close it after response 
       progressDoalog.dismiss(); 
       Log.v("this", "Yes!"); 
      } 
     } 

     @Override public void onFailure(Call <JSONResponse> call, Throwable t) { 
      // close it after response 
      progressDoalog.dismiss(); 
      Log.v("this", "No Response!"); 
     } 
    }); 
+0

Бинго! Решил мою проблему ... Могу ли я просто показать круговую индикацию прогресса, а не диалог? –

+0

Я хочу показать индикатор прогресса, а не диалог. Является ли это возможным? –

0

Простой Trick ProgressBar в макете

<ProgressBar 
     android:id="@+id/progressBar" 
     style="?android:attr/progressBarStyle" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="?attr/actionBarSize" 
     android:layout_weight="1" /> 

Инициализировать прогрессбар

loadProgress = (ProgressBar) findViewById(R.id.progressBar); 

, наконец, сделать это после того, как ушел JSON нагрузки конкурировали

loadProgress.setVisibility(View.Gone); 

затем сделать его видимым в каком-то взаимодействия с пользователем, а затем, наконец, ушел, когда загрузка данных JSon завершена. Простой поддельный трюк

Смежные вопросы