У меня есть приложение для Android, которое использует WebView. При запуске приложения он проверяет, может ли WebView подключиться к серверу или нет. Если он может подключиться, нет никаких проблем, приложение загружается мгновенно, и WebView показывает страницу. Но если сервер недоступен или соединение не работает, оно должно занять несколько секунд (5-10) до появления сообщения об ошибке. Это потому, что, когда у вас медленное соединение, оно не показывает сообщение об ошибке непрерывно.Диалог загрузки загрузки Android WebView
Таким образом, без подключения вы видите черный экран в течение примерно 5-10 секунд. Я хочу просто простой диалог загрузки при запуске приложения. Чтобы вы не видели черный экран, люди знают, что приложение что-то делает. Как я могу архивировать это самым простым, но эффективным способом?
спасибо !!
EDIT:
Хорошо это то, что теперь у меня есть, я думаю, что это работает, но это правильный путь? И можно ли использовать этот поток Async также в mustOverideUrlLoading? Как я могу это сделать?
public class WebviewActivity extends MainActivity {
private WebView myWebView;
private ProgressDialog progressDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
final ScrollView mainScrollView = (ScrollView)findViewById(R.id.ScrollView01);
myWebView = (WebView)findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
progressDialog = ProgressDialog.show(WebviewActivity.this, "", "Loading...", true);
myWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
progressDialog.show();
if (isOnline() == false || isOnlineHost() == false)
myWebView.loadUrl("file:///android_asset/errorpage.html");
else
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
progressDialog.dismiss();
mainScrollView.fullScroll(ScrollView.FOCUS_UP);
}
});
myWebView.requestFocus(View.FOCUS_DOWN);
myWebView.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_UP:
if (!v.hasFocus()) {
v.requestFocus();
}
break;
}
return false;
}
});
}
@Override
public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig);
}
@Override
public void onResume() {
super.onResume();
new checkConnection().execute();
}
//DOING THE CONNECTION CHECK IN ANOTHER THREAD
public class checkConnection extends AsyncTask<String, Integer, String>{
private ProgressDialog progressDialog;
protected void onPreExecute(){
progressDialog = ProgressDialog.show(WebviewActivity.this, "", "Loading...", true);
progressDialog.show();
}
@Override
protected String doInBackground(String... params) {
if (isOnline() == true && isOnlineHost() == true)
myWebView.loadUrl(webLink);
else
myWebView.loadUrl("file:///android_asset/errorpage.html");
progressDialog.dismiss();
return null;
}
}
}
Это для меня что-то новое, выглядит тяжело. Не могли бы вы привести мне пример или кого-нибудь еще, у кого есть свободное время? Заранее спасибо! – MartijnG
Взгляните на [Безболезненная резьба] (http://developer.android.com/resources/articles/painless-threading.html). Сделайте проверку 'isOnlineHost' в методе' doInBackground' и отпустите 'ProgressDialog' в' onPostExecute'. – Rajesh
У меня есть что-то сейчас, и это работает правильно, я думаю. Не могли бы вы проверить мой источник? И можно ли использовать ту же AsyncTask для части в shouldOverideUrlLoading? Можете ли вы сказать мне, как это сделать? – MartijnG