アンドロイド初心者ですのでお手柔らかにお願いします。私はいくつかの「演習」を行っており、ホーム Wi-Fi ネットワークの 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);
}
}
私のコードは約 1 秒ごとに実行されるため、この目的のために TimerTask を使用します。そして、これが run() メソッドと内部で実行するためのコードを含む私の TimerTask クラスです。
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です: