문제

목록 항목을 보여주는 활동이 있습니다. 목록 항목을 클릭하면 네트워크 인포를 통해 사용 가능한 연결 유형 ( "wif"또는 "mobile")을 확인합니다. 이 방법을 호출하자마자 NullPointerException을 얻습니다. 왜요?

에뮬레이터에서 이것을 테스트했는데 휴대 전화가 현재 사용할 수 없기 때문입니다 (파손되었습니다 ...). 이것이 문제라고 생각합니까? 이것은 내가 가지고 있다는 유일한 설명입니다. 그렇지 않다면 왜 이것이 왜 Null인지 모릅니다.

코드 스 니펫은 다음과 같습니다.

public class VideoList extends ListActivity{
 ...
 public void onCreate(Bundle bundle){
  final ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
  ...
  listview.setOnItemClickListener(new OnItemClickListener(){
   public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    ...
    NetworkInfo ni = cm.getActiveNetworkInfo();
    String connex = ni.getTypeName(); //Nullpointer exception here
    if(connex.equals("WIFI")doSomething();
   }
  });
 }
}
도움이 되었습니까?

해결책

호출 getActiveNetworkInfo() 활성 네트워크가 없으면 NULL을 반환 할 수 있으며이를 확인해야합니다. 다음은 소스 코드입니다 여기.

/**
 * Return NetworkInfo for the active (i.e., connected) network interface.
 * It is assumed that at most one network is active at a time. If more
 * than one is active, it is indeterminate which will be returned.
 * @return the info for the active network, or {@code null} if none is active
 */
public NetworkInfo getActiveNetworkInfo() {
    enforceAccessPermission();
    for (NetworkStateTracker t : mNetTrackers) {
        NetworkInfo info = t.getNetworkInfo();
        if (info.isConnected()) {
            return info;
        }
    }
    return null;
}

특히 Javadoc에 주목하십시오. "활성 네트워크에 대한 정보를 반환하거나 활성화되지 않은 경우 NULL".

다른 팁

나는 당신이 연결되어 있고 에뮬레이터가 그것을 사용할 수 있다는 것을 이해하지만 getActivenetWorkInfo ()를 호출하는 것은 어쨌든 당신을 null로 반환합니다. 그래서 당신은 당황한 이유입니다.

글쎄, 당신의 의심은 옳았습니다.

에뮬레이터에서 3G를 켜기 위해 F8을 눌러 CM.GetActivenEtworkInfo ()를 켜면 Null이 아닌 USABLE NetworkInfo 핸들을 반환합니다.

대신에

if(connex.equals("WIFI") doSomething();

노력하다

if("WIFI".equals(connex)) doSomething();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top