アプリに取り組んでいますが、奇妙なエラーが発生します。 res/values/strings
に文字列リソースを入れて保存しました。アクティビティでアクセスしたい場合、次のようなエラーが発生します
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;
}
私はこれまでこのような問題を抱えたことがなかったので、どうしたらよいかわかりません。私を助けてください。皆さんありがとう。
このエラーが発生することがあります(2日に1回)。これは、Eclipseが新しいコードをコンパイルしておらず、古いapkをデプロイしているためです。私はこれを修正します
adb kill-server
およびadb start-server
を実行してadbサーバーを再起動しますおそらく余分なimport Android.R;
があり、文字列がそこに見つかりません。それ以外の場合は、プロジェクトをクリーンアップして再構築し、再試行してから報告してください。
私が持っていたものは
import Android.R;
の代わりに
import com.example.project.R;
Android.Rにはリソースがなく、一般的なAndroidリソースのみがあります。
私は現在、Playストアで見つけることができる「net.superlinux.tcltktutorials」を書いています。アプリケーションでは、ロケールを使用する方法ではなく、ロケールを使用する標準的な方法を使用したいと思います。アラビア語の/ res/vlaues-arを追加する必要があり、英語の/ res/valuesのデフォルトがあります。このアプリは、広告ベースのYouTubeプレイリストTCL/Tkプログラミング言語のチュートリアルに関するものです。これで、プレイリストをアラビア語と英語にすることができます。私が気付いたのは、同じプレイリストのデフォルトの/ res/values36エントリと/ 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;
}
}
}
}
Eclipseでプロジェクトをクリーンアップし、実行してみます。これで問題が解決しない場合は、すでに実行中のエミュレーターからアプリをアンインストールし、eclispeから再度実行します。
このエラーが発生する可能性がある2つのケースがあります
1.strings.xmlファイルが正しく参照されていませんか?
回答:アプリケーションごとにR.Javaファイルの正しいパッケージ名を指定しますか?
2.正しいstring.xlmパスを保持している場合でも、エラーが発生する可能性がありますか?
回答:プロジェクターをクリーンアップしてビルドしたら、EclipseまたはAndroid studioを再起動します。
ありがとうkrishh
このスレッドをチェックアウトしてください、それは私の問題を修正しました。 Rを解決できません-Androidエラー