所以我对Android很陌生,并且以前的Java经验有限,所以请多多包涵。我正在尝试在 Android 应用程序中创建 WifiManager 类型的对象,并且我发现其他几个人建议逐字创建 WifiManager 对象:
WifiManager wifi = mContext.getSystemService(Context.WIFI_SERVICE);
在我的程序中。现在 Eclipse 已经用错误类型不匹配,无法从对象转换为 WifiManager下划线了 mContext.GetSystemService 等部分
现在我尝试使用以下方法重铸回报:
(WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
这将编译,但在执行时会导致java.lang.NullPointerException
对此的任何想法将不胜感激!
更新*
所以我已经设置了
Context mContext;
在我的主要课程中
然后我尝试使用广播在我的网络上查找 SQL 服务器的地址。代码有点乱,因为我正处于试图让广播开始工作的阶段。但这里是功能。
public void findSQL()
{
int PORT = 1433;
try
{
byte buff[] = new byte[1024];
DatagramSocket sock = new DatagramSocket(PORT);
sock.setBroadcast(true);
// Create and send the broadcast packet
DatagramPacket dp = new DatagramPacket(buff, 7, getBroadcastAddress(), PORT);
sock.send(dp);
DatagramPacket dp1 = new DatagramPacket(buff, buff.length);
sock.receive(dp1);
sock.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
InetAddress getBroadcastAddress() throws IOException {
WifiManager wifi = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
DhcpInfo dhcp = wifi.getDhcpInfo();
System.out.println(dhcp.toString());
if(dhcp==null)
return InetAddress.getByAddress(null);
int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask;
byte[] quads = new byte[4];
for (int k = 0; k < 4; k++)
{
quads[k] = (byte) ((broadcast >> k * 8) & 0xFF);
}
return InetAddress.getByAddress(quads);
}
第二次编辑*
在我的代码前面,我定义了:
@SuppressWarnings("unused")
class MSSQL_DB
{
Context mContext;
public void dbConnect(String db_connect_string,
String db_userid, String db_password)
{
try
{
Class.forName("net.sourceforge.jtds.jdbc.Driver");
Connection conn = DriverManager.getConnection(db_connect_string,
db_userid, db_password);
System.out.println("Connected");
}
catch (Exception e)
{
e.printStackTrace();
}
}
恐怕“上下文”实际上是做什么的,如何正确声明它以及如何使用它的方法的整个概念是我尚未完全理解的。