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

时间:2016-07-13 11:25:54

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

我使用后台服务和广播接收器制作应用,我的应用包含myServiceRunner.javaandroid.content.res.Resources$NotFoundException: String resource id #0x64。当我启动后台服务时,它会给我这个错误 IntentFilter mainFilter=new IntentFilter("liren.action.GOSERVICE3"); receiver=new MyMainLocalReceiver(); registerReceiver(receiver, mainFilter);

我将这些代码放在protected void onCreate(Bundle savedInstanceState)中:

   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());
        }

    }
}
  

MyMainLocalReceiver.java

  @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);
}

在myServiceRunner中扩展了Service类,我在onStartCommand方法中添加了这些代码。

    <service android:name=".myServiceRunner"></service>
    <receiver android:name=".RecordSaved$MyMainLocalReceiver"></receiver>
  

的manifest.xml

我添加了这些:

<?php   if(isset($_POST['submit'])) {
    $count=count($_FILES["images"]["name"]);


for($i=0;$i<$count;$i++) {      if ((($_FILES["images"]["type"][$i] == "image/gif")  || ($_FILES["images"]["type"][$i]  == "image/jpeg") || ($_FILES["images"]["type"][$i]  == "image/pjpeg")) && ($_FILES["images"]["size"][$i] < 100000)) {

 if ($_FILES["images"]["error"][$i]  > 0)  {  echo "File Error : " . $_FILES["images"]["error"][$i]  . "<br />";   }   else   {   echo "Upload File Name: " . $_FILES["images"]["name"][$i]  . "<br />";  echo "File Type: " . $_FILES["images"]["type"][$i]  . "<br />";   echo "File Size: " . ($_FILES["images"]["size"][$i]  / 1024) . " Kb<br />";


   if (file_exists("public/images/".$_FILES["images"]["name"][$i] ))   {    echo "<b>".$_FILES["images"]["name"][$i]  . " already exists. </b>";    }    else   {
    move_uploaded_file($_FILES["images"]["tmp_name"][$i] ,"public/images/".             $_FILES["images"]["name"][$i] );
    echo "Stored in: " . "public/images/" . $_FILES["images"]["name"][$i] ."<br />";    ?>    Uploaded File:<br>   <img src="public/images/<?php echo $_FILES["images"]["name"][$i] ; ?>" alt="Image path    Invalid" >   <?php   }   }   }else  {   echo "Invalid file detail ::<br> file type ::".$_FILES["images"]["type"][$i] ." ,    file    size::: ".$_FILES["images"]["size"][$i] ;   }  }    }?>

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

3 个答案:

答案 0 :(得分:5)

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

尝试,

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

您也可以这样做:

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