gpt4 book ai didi

java - 使用 getInt(String) 时出现 NullPointerException

转载 作者:行者123 更新时间:2023-12-02 00:05:52 25 4
gpt4 key购买 nike

我是 Android 初学者,所以请对我宽容一些。我正在做一些“练习”,并且正在编写简单的应用程序,它将告诉家庭 wifi 网络的 RSSI 强度。获取该数字非常容易,但更新它并在屏幕上显示它比我想象的要复杂一些。

首先这是我的 onCreate Activity 。在此 Activity 中,我将启动另一个 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);
}
}

在这个类(class)中,我想将 RSSI 结果发送到我的 Activity ,然后更新文本。但是当我在下面调用此代码时,在 Activity 中我总是得到 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:

enter image description here

最佳答案

我发现一个常见错误。不要这样做:

sendInfo.putInt("RSSI", rssi);
intent.putExtras(sendInfo); // This adds a Bundle to your existing Bundle!

您正在创建一个 Intent,其中包含额外的 bundle ,以及包含 rssi 的 bundle 。忽略这个不必要的 bundle :

intent.putExtras("RSSI", rssi);

现在在您的下一个 Activity 中您可以使用:

getIntent().getIntExtra("RSSI", 0);

但是,您应该始终检查以确保没有任何意外的 null 变量:

Intent in = getIntent();
if(in != null) {
int rssi = in.getIntExtra("RSSI", -1);
if(rssi < 0)
wifi_check.setText(""+rssi);
else
wifi_check.setText("Unknown");
}

关于java - 使用 getInt(String) 时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13896041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com