in meiner App, zeige ich ein ErrorFragment
Objekt mit einer RETRY-Taste, um für das Internet erneut zu überprüfen, wenn es keine gibt. Wenn der Benutzer jedoch eine Internetverbindung hergestellt und auf die Schaltfläche RETRY geklickt hat, bleibt die Benutzeroberfläche für einige Sekunden hängen.Android: Überprüfung der Internetverbindung hängt die UI
Ich weiß nicht, diese Aufgabe auf dem Hauptthread auszuführen, so dass ich implementiert die folgenden:
public class MainFragment extends VerticalGridFragment
{
....
if (isConnectedToInternet() == true)
{
// Load data
}
else
{
displayInternetError();
}
public void displayInternetError()
{
Log.d(TAG, "displayInternetError");
final ErrorFragment error = new ErrorFragment();
getFragmentManager().beginTransaction().replace(R.id.main_browse_fragment, error)
.commit();
error.setImageDrawable(getResources().getDrawable(R.drawable.lb_ic_sad_cloud, null));
error.setMessage(getResources().getString(R.string.no_internet_message));
error.setDefaultBackground(true);
error.setButtonText(getResources().getString(R.string.retry_connection));
error.setButtonClickListener(new View.OnClickListener()
{
@Override
public void onClick(View arg0)
{
if (isConnectedToInternet() == true)
{
getFragmentManager().beginTransaction().remove(error).commit();
getFragmentManager().popBackStack();
Singleton.getInstance().setInternetErrorShown(false);
prepareBackgroundManager();
setupFragment();
setupEventListeners();
}
else
{
Singleton.getInstance().setInternetErrorShown(true);
}
}
});
}
...
private class GetInternetStatus extends AsyncTask<Void,Void,Boolean>
{
@Override
protected Boolean doInBackground(Void... params)
{
return hasInternetAccess();
}
protected boolean hasInternetAccess()
{
try
{
URL url = new URL("http://www.google.com");
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setRequestProperty("User-Agent", "Android Application:1");
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(1000 * 30);
urlc.connect();
// http://www.w3.org/Protocols/HTTP/HTRESP.html
if (urlc.getResponseCode() == 200 || urlc.getResponseCode() > 400)
{
// Requested site is available
return true;
}
}
catch (Exception ex)
{
// Error while trying to connect
ex.printStackTrace();
return false;
}
return false;
}
}
// Checking for all possible internet connections
public boolean isConnectedToInternet()
{
Boolean result = false;
try
{
// Get the result after executing AsyncTask
result = new GetInternetStatus().execute().get();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
catch (ExecutionException e)
{
e.printStackTrace();
}
return result;
}
....
}
Aber es hängt immer noch und die Benutzeroberfläche reagiert nicht. Wie kann ich dieses Problem beheben?
Dank
Während, ja, Google, ist schnell zu reagieren, möchten Sie möglicherweise einen anderen Server als google für eine schnellere Ladezeit "ping". –