我是android初学者,所以请放轻松。我正在做一些“练习”,我正在编写简单的应用程序,它将告诉家庭 wifi 网络的 RSSI 强度。得到这个数字很容易,但是更新它并在屏幕上显示它就像我想的那样复杂一点。
首先这是我的 onCreate 活动。在此活动中,我将启动另一个 android 组件 - 服务。因为代码将在后台运行(我知道我可以使用线程或其他东西,但这是为了“练习”,我有一些想法如何处理这个应用程序,同时运行服务而不与 UI 交互)
public class MainActivity extends Activity {
TextView wifi_check;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
referenceViews();
startService(new Intent(this, CheckingWifiService.class));
//wifi_check.setText(""+getIntent().getExtras().getInt("RSSI"));
}
private void referenceViews() {
wifi_check = (TextView) findViewById(R.id.wifiCheck_TV);
}
}
因为我的代码将每隔一秒左右运行一次,所以我将为此使用 TimerTask。这是我的 TimerTask 类,其中包括 run() 方法和用于在内部执行的代码
public class TimerTsk extends TimerTask {
Context act;
WifiManager wifiMan;
WifiInfo info;
Bundle sendInfo;
Intent intent;
int rssi;
public TimerTsk(Context context) {
act = context;
}
@Override
public void run() {
intent = new Intent();
sendInfo = new Bundle();
wifiMan = (WifiManager) act.getSystemService(Activity.WIFI_SERVICE);
info = wifiMan.getConnectionInfo();
rssi = info.getRssi();
Log.d("WORKED", "RUNNING SUCESSFULLY");
// i want to send info to my activity
sendInfo.putInt("RSSI", rssi);
intent.putExtras(sendInfo);
}
}
从这个类中,我想将 RSSI 的结果发送到我的活动,然后更新文本。但是当我在下面调用这段代码时,在活动中我总是得到 NullPointerException。
wifi_check.setText(""+getIntent().getExtras().getInt("RSSI"));
老实说,我很难弄清楚代码的哪一部分抛出了异常。而且我发现更准确地说,这部分代码正在抛出异常。
getInt("RSSI")
总的来说,我看到该服务正在运行,因为在我的 LOGCAT 中,我看到了我在 TimerTsk 类中使用 Log.d 创建的消息。
任何想法为什么会发生这种情况?
这是我的服务类:
public class CheckingWifiService extends Service{
int rssi;
Timer time;
TimerTsk ttsk;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
time = new Timer();
time.schedule(new TimerTsk(getApplicationContext()), 500);
return START_STICKY;
}
}
这是我的 LogCat: