Android,找不到字符串资源

时间:2011-07-13 09:30:25

标签: android string resources r.java-file

我正在开发一个应用程序,我收到了错误。我在res/values/strings中添加了一些String资源并保存了它。现在,如果我想在Activity中访问它,我会收到类似这样的错误

07-13 11:16:20.050: ERROR/AndroidRuntime(5883): Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x7f060006

我无法弄清楚原因。 资源看起来像这样:

<string name="dialog_download_text">please wait while downloading</string>

我希望像

一样访问它
public void onCreate(Bundle b){
    super.onCreate(b);
    String s = getResources().getString(R.string.dialog_download_text);
}

我也查看了R.java并找到了我的条目

public static final class string {
    public static final int dialog_download_cancel=0x7f060005;
    public static final int dialog_download_text=0x7f060007;
    public static final int dialog_download_title=0x7f060006;
}

我不知道该怎么做,因为我之前从未遇到过这样的问题。 请帮我。谢谢大家。

8 个答案:

答案 0 :(得分:17)

有时我会收到此错误(每2天一次),这是因为eclipse没有编译新代码并且正在部署旧的apk。 我通过

来解决这个问题
  • 在日食上做一个干净的工作(项目 - &gt;干净)
  • 关闭模拟器
  • 通过从命令行运行adb kill-serveradb start-server重新启动adb服务器

答案 1 :(得分:13)

最有可能是额外import android.R;那么你的字符串就找不到了。否则,清理项目并重建它,再试一次,然后报告回来。

答案 2 :(得分:12)

我的所作所为

import android.R;

而不是

import com.example.project.R;

android.R没有你的资源它只有一般的android资源。

答案 3 :(得分:0)

签出这个帖子,它解决了我的问题。 R cannot be resolved - Android error

答案 4 :(得分:0)

在eclipse中清理项目,然后尝试运行。如果这不能解决您的问题,请从已经运行的模拟器卸载应用程序,然后从eclispe再次运行它。

答案 5 :(得分:0)

我目前正在编写“net.superlinux.tcltktutorials”,您现在可以在Play商店中找到它。 现在在应用程序中,我想使用标准方法来使用语言环境而不是我的方式来做区域设置。我必须添加阿拉伯语/ res / vlaues-ar,我有英语/ res /值的默认值。 该应用程序是基于广告的YouTube播放列表TCL / Tk编程语言教程。现在播放列表可以是阿拉伯语和英语。我注意到,如果你有相同播放列表的默认/ res / values 36条目和/ res / values-ar 35条目,这将使ResourceNotFound异常。您所要做的就是在列表底部将缺少的条目添加为空,只是为了使其在英语和阿拉伯语中的数字相同,即使英语播放列表的数量较少。

这是我添加到列表活动内部形成的播放列表的方法,也是一种将资源用作内置数据的xml的巧妙方法:

package net.superlinux.tcltktutorials;
import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ListOfVideos extends ListActivity {

List<String> model = new ArrayList<String>();
ArrayAdapter<String> adapter = null;
List<String> filename = new ArrayList<String>();

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.listview);



     adapter = new ArrayAdapter<String> (this, R.layout.list_item, model);


    load_playlist();
    setListAdapter(adapter);



}


@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    // TODO Auto-generated method stub
            super.onListItemClick(l, v, position, id);
    String selected_youtube_video=filename.get(position);
    try {Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube:"+selected_youtube_video));
startActivity(i);
    }
    catch(Exception e){

        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v="+selected_youtube_video+"&loop=1&autoplay=1")));
        e.printStackTrace();
    }
}

void load_playlist()
{

    int display_id=0;
    int file_id=0;
    //loop forever until nothing has to be added to the ListView or stop if the list item
    // to be added does not exist.
    for (int i=0;;i++){
        display_id=getResources().getIdentifier("display_"+i, "string", getPackageName());
    if (display_id!=0 && getString(display_id).length()!=0)
        adapter.add(getString(display_id));
    else {
        Log.e("string id not found or empty","R.string.display_"+i );
        return;
    }
    file_id=getResources().getIdentifier("file_"+i, "string", getPackageName());
    if (file_id!=0 && getString(file_id).length()!=0){
    filename.add(getString(file_id));
    }
    else {
        Log.e("string id not found or empty","R.string.file_"+i );
        return;
    }
    }
}

}

答案 6 :(得分:0)

有两种情况可能会出现此错误

1.您的strings.xml文件未正确引用?

Ans:根据您的应用程序为R.java文件提供正确的包名?

2.如果你保持正确的string.xlm路径,你可能会得到错误吗?

Ans:一旦清理并构建投影仪,请重新启动eclipse或android studio。

由于 krishh

答案 7 :(得分:-1)

我也遇到了这个问题,起初它非常有线。 1:我确保将正确的R导入我的班级 2:我在gen文件夹中检查了R.java,资源ID就在那里。 3:我清理了我的项目并从手机中取出并重新启动它 例外仍然存在。

最后我找到了原因: 我刚刚将我的资源字符串添加到特定于语言的文件夹(比如values-zh)中的strings.xml中,但是在默认值文件夹的默认strings.xml中将其遗漏了。

然后就解决了。