android.content.res.Resources$NotFoundException: 字符串资源 ID #0x64

android.content.res.Resources$NotFoundException: String resource id #0x64

我制作了一个带有后台服务和广播接收器的应用程序,我的应用程序由 MainActivity.javamyServiceRunner.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类型。