2015-01-21 4 views
1

내 딸을위한 간단한 응용 프로그램을 개발하려고하지만 전문적이지 않습니다. :)Android - 컨텍스트 매개 변수를 메서드에 전달하는 방법

부울 메서드에 컨텍스트를 전달하는 방법을 궁금합니다. 나는 Context 매개 변수를 전달하는 방법을 모르기 때문에

public static boolean hasActiveInternetConnection(Context context) { 
if (isNetworkAvailable(context)) { 
    try { 
     HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection()); 
     urlc.setRequestProperty("User-Agent", "Test"); 
     urlc.setRequestProperty("Connection", "close"); 
     urlc.setConnectTimeout(1500); 
     urlc.connect(); 
     return (urlc.getResponseCode() == 200); 
    } catch (IOException e) { 
     Log.e(LOG_TAG, "Error checking internet connection", e); 
    } 
} else { 
    Log.d(LOG_TAG, "No network available!"); 
} 
return false;} 

내가 오류를 얻고으로

private boolean isNetworkAvailable() { 
ConnectivityManager connectivityManager 
    = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
return activeNetworkInfo != null;} 

아래 두 코드를 병합 할 때

내 문제이다.

답변

-1
private boolean isNetworkAvailable(Context ctx) { 
ConnectivityManager connectivityManager 
    = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
return activeNetworkInfo != null;} 
0

예, Android에서는 종종 컨텍스트에 대한 참조가 필요합니다.

기본적으로 Context class doc을 살펴보면 애플리케이션 및 활동 (FragmentActivity와 같은 모든 유사 콘텐츠 포함)의 두 가지 중요한 클래스가 서브 클래 싱되었음을 알 수 있습니다.

그래서 기술은 간단합니다 : 당신이 그

  • 중 하나가

  • (컨텍스트 필드를 유지하기위한 싱글 톤 패턴을 사용하여 문맥으로 활동/응용 프로그램 개체를 통과 할 아무 곳이나 문맥이 필요하다 사용자 정의 응용 프로그램 클래스는 종종 코드의 당신의 조각에 관한)

getApplicationContext()를 참조 그것을 위해 사용됩니다
getSystemService()은 실제로 Context 클래스의 메소드이며, Activity 객체의 어딘가에 (Activity가 Context 서브 클래스 인 것처럼) 호출한다고 생각합니다. 따라서 ... if (isNetworkAvailable(context)) ...에 컨텍스트 개체를 전달할 이유가 없으므로 isNetworkAvailable() 메서드가 작업에 보관 될 때까지이 인수를 제거하면됩니다.

문맥에 대한 강력한 참고를 유지하는 데주의하십시오!

1

이를 교체해야합니다 :이

private boolean isNetworkAvailable() { 
ConnectivityManager connectivityManager 
    = (ConnectivityManager); getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
return activeNetworkInfo != null; 
} 

:

private boolean isNetworkAvailable(Context context) { 
ConnectivityManager connectivityManager 
    = (ConnectivityManager); context getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
return activeNetworkInfo != null; 
} 
관련 문제