내 앱에서 웹에서 데이터를로드 한 다음 사용자에게 표시하는 중입니다. 데이터를로드하기 전에 앱에 진행률 대화 상자가 표시됩니다. 사용자가 작업로드 중 중간에 전화를 잠 그거나 서버가 과부하 상태가되어 응용 프로그램이 멈 추면 문제가 발생합니다. 진행률 대화 상자가 닫히지 않거나 필요한 데이터가 부족하기 때문에 충돌이 발생하는 경우가 있습니다.데이터로드 중 unitl succesfull 또는 user break
데이터를로드하는 중에 오류가 발생하면 사용자에게 몇 가지 대화 상자를 표시하여 오류에 대해 알리고 애플리케이션에 마지막 요청을 반복하도록 요청해야합니다. AlertDialog를 사용하려고했지만 성공하지 못했습니다. 여기
은 하나 개의 활동의 코드 (여기서 대화 진전이 없다,하지만 내가 데이터를로드하는 방법을 보여줍니다) :
@EActivity(R.layout.layout_splash)
@RoboGuice
public class SplashScreenActivity extends Activity {
@Inject
private AvtopoiskParserImpl parser;
@Bean
BrandsAndRegionsHolder brandsAndRegionsHolder;
@ViewById(R.id.splash_progress)
ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
loadData();
}
@Background
protected void loadData() {
publishProgress(10);
LinkedHashMap<String, Integer> brands = null;
try {
brands = parser.getBrands();
} catch (IOException e) {
Log.e(e.getMessage());
}
publishProgress(50);
LinkedHashMap<String, Integer> regions = null;
try {
regions = parser.getRegions();
} catch (IOException e) {
Log.e(e.getMessage());
}
publishProgress(70);
populateData(brands, regions);
}
@UiThread
protected void populateData(LinkedHashMap<String, Integer> brands, LinkedHashMap<String, Integer> regions) {
Intent intent = new Intent(SplashScreenActivity.this, SearchActivity_.class);
brandsAndRegionsHolder.brandsMap = brands;
brandsAndRegionsHolder.regionsMap = regions;
publishProgress(100);
startActivity(intent);
finish();
}
@UiThread
void publishProgress(int progress) {
progressBar.setProgress(progress);
}
}
parser.getBrands()
및 parser.getRegions()
은 웹에서 데이터를로드한다.
나는 이런 식으로 뭔가를 할 :
boolean repeatRequest = true;
while (repeatRequest) {
try {
brands = parser.getBrands();
repeatRequest = false;
} catch (IOException e) {
Log.e(e.getMessage());
repeatRequest = showErrorDialog();
}
}
하지만이 코드는 백그라운드 스레드에서 실행하기 때문에 그렇게 관리하지 않았지만, 대화 상자가 UI 스레드에 표시해야한다. 나는 그것이 표준 접근법이어야한다고 생각하지만 그것을 발견하지 못했습니다. 이 부분을 구현하려면 어떻게해야합니까?