10

いくつかのリストエントリを表示するアクティビティがあります。リストアイテムをクリックすると、アプリはNetworkInfo.getTypeName()を介して、使用可能な接続タイプ( "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();
   }
  });
 }
}
4

4 に答える 4

10

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を返します」。

于 2010-03-14T19:12:15.730 に答える
2

接続があり、エミュレーターがそれを使用できることを理解していますが、getActiveNetworkInfo()を呼び出すと、とにかくnullが返されるため、困惑します。

そうですね、あなたの疑惑は正しかったです。getActiveNetworkInfo()はエミュレーターでは機能せず、常にnullを返します。

于 2010-03-14T19:34:54.657 に答える
2

エミュレータでF8を押して3Gをオンにすると、cm.getActiveNetworkInfo()がnull以外の使用可能なNetworkInfoハンドルを返すことがわかりました。

于 2010-05-13T20:43:06.533 に答える
-1

それ以外の

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

試す

if("WIFI".equals(connex)) doSomething();
于 2010-07-01T09:19:12.743 に答える