저는 java와 android를 처음 사용하지만 학생들이 일부 콘텐츠와 상호 작용할 수있는 앱을 만드는 데 어려움을 겪고 있습니다. 내 수업 (나는 다음 학기 때까지 그들을 위해 준비하기를 바란다).Google 로그인 및 기타 네트워크 활동 전에 인터넷 연결을 확인하는 공용 클래스
학생들이 이메일 주소 (Google 계정)로 앱에 로그인 할 수 있고 앱의 각 작업 섹션 (성과가 나에게 이메일로 전송되는)에 대한 퀴즈가 포함되기를 바랍니다. 네트워크 연결 작업이 실행되기 전에 활성 연결에서 사용할 수 있도록하고 싶습니다. 내 자신의 코드를 공식화하기 위해 많은 질문 (Detect if android device is connected to the internet; ; How to check internet access on Android? InetAddress never times out; Checking internet connection on android, How to check internet access on Android? InetAddress never times out; ...)을 보았지만 실제로 네트워크 요청을 보장하기 위해 AsyncTask를 사용하는 방법을 이해하지 못했습니다. NetworkOnMainThreadException을 가져 오지 못하도록 주 스레드가 실행하지 않습니다. 내 앱에서 로그인 또는 성적 발송 작업을 수행하기 전에 AsycTask 또는 Threads를 사용하여 인터넷 확인을 수행하는 올바른 방법을 안내해 줄 수 있습니까?
는signInButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (isNetworkAvailable(getApplicationContext())) {
progressDialog.show();
Intent intent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(intent, LOGIN_GOOGLE_NUMBER);
} else {
Toast.makeText(getApplicationContext(), "Please ensure that you are connected to the Internet and then try again", Toast.LENGTH_LONG).show();
}
}
});
메인 로그인 완료 클래스의 일부인 인터넷 연결을 확인하기위한의 방법은 다음과 같습니다 나는 다음과 같은 활동에 사인을 처리하는 내 활동에서 내 isNetworkAvailable 메소드를 호출하고있는 순간
이 :// Check if the network is connected (and if Internet is working)
private boolean isNetworkAvailable(Context context) {
//final ConnectivityManager connectivityManager = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE));
//return connectivityManager.getActiveNetworkInfo() != null && connectivityManager.getActiveNetworkInfo().isConnected();
boolean connected = false;
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED ||
connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) {
//we are connected to a network
connected = true;
} else
connected = false;
if (connected) {
checkConnectivity isConnected = new checkConnectivity();
if (isConnected.hasInternetAccess(getApplicationContext())) {
return true;
} else
return false;
} else
return false;
}
내가 별도의 공용 클래스와 같은 응용 프로그램을 통해 액세스 할 수 원하는 AsyncTask를 참조한다 :
012,399,514,798을이 코드는 점진적으로 코딩되었습니다. 네트워크 연결을 테스트 할 섹션이 있다면 제대로 작동하지만 http url 요청을 추가하면 문제가 발생합니다.
인터넷에 연결되어 있는지 확인하기 위해 앱의 다른 위치에서 사용할 수있는 공용 클래스를 정의하는 올바른 방법은 무엇이며 해당 특정 활동에서 전화를 걸려면 어떻게해야합니까? 어떤 도움을 주시면 감사하겠습니다.
일도 하나의 샘플 방법이었다, 당신은'AsyncTask'에 활동을 전달하는 호출 API 전에 이온. 이로 인해 앱에서 메모리가 누출 될 수 있으므로 수행하지 않아야합니다. 또한 캐싱과 같은 네트워킹과 관련된 대부분의 작업을 처리 할 네트워킹 라이브러리를 사용할 수 있습니다. –
https://stackoverflow.com/a/42229749/5610842 문제가 있으면 알려주십시오. – RaghavPai