android.content.res.Resources$NotFoundException: 字符串资源 ID #0x64
android.content.res.Resources$NotFoundException: String resource id #0x64
我制作了一个带有后台服务和广播接收器的应用程序,我的应用程序由 MainActivity.java
和 myServiceRunner.java
组成。当我启动后台服务时,它给我这个错误,android.content.res.Resources$NotFoundException: String resource id #0x64
。
我将这些代码放在 protected void onCreate(Bundle savedInstanceState) 中:
IntentFilter mainFilter=new IntentFilter("liren.action.GOSERVICE3");
receiver=new MyMainLocalReceiver();
registerReceiver(receiver, mainFilter);
MyMainLocalReceiver.java
public class MyMainLocalReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
try
{
int serviceData=intent.getIntExtra("serviceData",0);
//Toast.makeText(getApplicationContext(), serviceData,Toast.LENGTH_SHORT).show();
tvStepsCount.setText(serviceData);
}
catch (Exception e)
{
tvStepsCount.setText(e.toString());
}
}
}
在 myServiceRunner extends Service class 中,我在 onStartCommand 方法中添加了这些代码。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Thread triggerService=new Thread(new Runnable() {
@Override
public void run() {
for(;;)
{
try
{
Intent myFilteredResponse = new Intent("liren.action.GOSERVICE3");
myFilteredResponse.putExtra("serviceData",100);
sendBroadcast(myFilteredResponse);
Thread.sleep(5000);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
});
triggerService.start();
return super.onStartCommand(intent, flags, startId);
}
manifest.xml
我添加了这些:
<service android:name=".myServiceRunner"></service>
<receiver android:name=".RecordSaved$MyMainLocalReceiver"></receiver>
我无法找出错误,有人可以帮我吗?谢谢:)
您正在使用 .SetText()
。但您传递的是 int
类型。那是个问题。所以你需要转换你的 int to String
试一试,
tvStepsCount.setText("" + serviceData); // concat with empty string
你也可以这样做:
tvStepsCount.setText(String.valueOf(serviceData));
如您在 TextView class 中所见,TextView.setText() 方法的第一个参数可以是 resId,即整数或字符序列或字符数组。因此,当您将整数值传递给 TexView.setText() 时,android studio 不会显示错误或警告。
在你的代码中tvStepsCount.setText(serviceData);
serviceData是一个整数类型,android把这个值当作一个resId,在R中寻找对应的资源class。由于 serviceData 实际上不是 resId android return Resources$NotFoundException.
所以在这种情况下我们需要明确地将serviceData转换为String类型。
我制作了一个带有后台服务和广播接收器的应用程序,我的应用程序由 MainActivity.java
和 myServiceRunner.java
组成。当我启动后台服务时,它给我这个错误,android.content.res.Resources$NotFoundException: String resource id #0x64
。
我将这些代码放在 protected void onCreate(Bundle savedInstanceState) 中:
IntentFilter mainFilter=new IntentFilter("liren.action.GOSERVICE3");
receiver=new MyMainLocalReceiver();
registerReceiver(receiver, mainFilter);
MyMainLocalReceiver.java
public class MyMainLocalReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
try
{
int serviceData=intent.getIntExtra("serviceData",0);
//Toast.makeText(getApplicationContext(), serviceData,Toast.LENGTH_SHORT).show();
tvStepsCount.setText(serviceData);
}
catch (Exception e)
{
tvStepsCount.setText(e.toString());
}
}
}
在 myServiceRunner extends Service class 中,我在 onStartCommand 方法中添加了这些代码。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Thread triggerService=new Thread(new Runnable() {
@Override
public void run() {
for(;;)
{
try
{
Intent myFilteredResponse = new Intent("liren.action.GOSERVICE3");
myFilteredResponse.putExtra("serviceData",100);
sendBroadcast(myFilteredResponse);
Thread.sleep(5000);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
});
triggerService.start();
return super.onStartCommand(intent, flags, startId);
}
manifest.xml
我添加了这些:
<service android:name=".myServiceRunner"></service>
<receiver android:name=".RecordSaved$MyMainLocalReceiver"></receiver>
我无法找出错误,有人可以帮我吗?谢谢:)
您正在使用 .SetText()
。但您传递的是 int
类型。那是个问题。所以你需要转换你的 int to String
试一试,
tvStepsCount.setText("" + serviceData); // concat with empty string
你也可以这样做:
tvStepsCount.setText(String.valueOf(serviceData));
如您在 TextView class 中所见,TextView.setText() 方法的第一个参数可以是 resId,即整数或字符序列或字符数组。因此,当您将整数值传递给 TexView.setText() 时,android studio 不会显示错误或警告。
在你的代码中tvStepsCount.setText(serviceData);
serviceData是一个整数类型,android把这个值当作一个resId,在R中寻找对应的资源class。由于 serviceData 实际上不是 resId android return Resources$NotFoundException.
所以在这种情况下我们需要明确地将serviceData转换为String类型。