【问题标题】:android.content.res.Resources$NotFoundException: String resource id #0x64android.content.res.Resources$NotFoundException:字符串资源 ID #0x64
【发布时间】:2016-07-13 11:25:54
【问题描述】:

我制作了一个带有后台服务和广播接收器的应用,我的应用由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 扩展 Service 类中,我在 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>

我无法弄清楚错误,有人可以帮助我吗?谢谢:)

【问题讨论】:

标签: android service broadcastreceiver android-service android-broadcast


【解决方案1】:

您正在使用.SetText()。但是您正在传递int 类型。这是个问题。所以你需要转换你的int to String

试试看,

tvStepsCount.setText("" + serviceData); // concat with empty string

【讨论】:

    【解决方案2】:

    正如您在 TextView 类中看到的,TextView.setText() 方法的第一个参数可以是 resId,即整数或字符序列或字符数组。因此,当您将 Integer 值传递给 TexView.setText() 时,android studio 不会显示错误或警告。

    在你的代码中tvStepsCount.setText(serviceData); serviceData 是一个整数类型,android 将此值视为一个 resId 并在 R 类中查找相应的资源。由于 serviceData 不是 resId 实际上 android 返回 Resources$NotFoundException.

    所以在这种情况下,我们需要将 serviceData 显式转换为 String 类型。

    【讨论】:

      【解决方案3】:

      你也可以这样做:

       tvStepsCount.setText(String.valueOf(serviceData));
      

      【讨论】:

        猜你喜欢
        • 2013-06-27
        • 2021-05-09
        • 2019-08-16
        • 1970-01-01
        • 1970-01-01
        • 2023-01-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多