16

私はアプリに取り組んでいますが、奇妙なエラーが発生しています。String リソースをいくつか入れて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;
}

このような問題は今までなかったので、どうすればよいかわかりません。私を助けてください。皆さんありがとう。

4

9 に答える 9

18

ときどきこのエラーが発生します (2 日に 1 回)。これは、Eclipse が新しいコードをコンパイルしておらず、古い apk をデプロイしているためです。私はこれを修正します

  • Eclipse でクリーンアップを行う (プロジェクト -> クリーンアップ)
  • エミュレータを閉じる
  • コマンドラインから実行adb kill-serverしてadbサーバーを再起動するadb start-server
于 2011-07-13T09:36:09.537 に答える
16

私が持っていたのは

import android.R;

それ以外の

import com.example.project.R;

android.Rにはリソースがなく、一般的なandroidリソースのみがあります。

于 2012-11-18T13:11:44.447 に答える
16

ほとんどの場合、余分なimport android.R;ものがあります。その後、文字列が見つかりません。それ以外の場合は、プロジェクトをクリーンアップして再構築し、再試行してから報告してください。

于 2011-07-13T09:36:02.013 に答える
0

私は現在「net.superlinux.tcltktutorials」を書いています。今すぐ Play ストアで見つけることができます。アプリケーションでは、ロケールを使用する方法の代わりに、ロケールを使用する標準的な方法を使用したいと考えています。アラビア語の /res/vlaues-ar を追加する必要があり、英語の /res/values のデフォルトがあります。このアプリは、広告ベースの 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;
    }
    }
}

}
于 2013-03-15T17:42:24.927 に答える
0

Eclipse でプロジェクトを消去し、実行してみます。これで問題が解決しない場合は、既に実行中のエミュレーターからアプリをアンインストールし、Eclipse から再度実行します。

于 2012-02-08T11:13:01.900 に答える
0

このエラーが発生する可能性のある 2 つのケースがあります

1.strings.xml ファイルが正しく参照されていませんか?

回答: アプリケーションごとに R.java ファイルの正しいパッケージ名を指定してください。

2. 正しい string.xlm パスを維持した場合でも、エラーが発生することがありますか?

回答:プロジェクターをクリーンアップしてビルドしたら、Eclipse または Android Studio を再起動します。

ありがとうクリシュ

于 2016-06-17T06:23:11.920 に答える
0

このスレッドをチェックアウトすると、問題が解決しました。 R を解決できません - Android エラー

于 2011-07-15T02:53:45.533 に答える
-1

私もこの問題に遭遇しましたが、最初は非常に有線です。1: クラスに正しい R をインポートしていることを確認します。 2: gen フォルダーの R.java を確認すると、リソース ID がそこにあります。3: プロジェクトをクリーンアップし、携帯電話から削除して再起動しましたが、まだ例外が残っています。

最後に、理由を見つけました。リソース文字列を言語固有のフォルダー (values-zh など) のstrings.xml に追加しましたが、既定値フォルダーの既定のstrings.xml では見逃していました。

その後、それは解決されます。

于 2014-10-29T07:11:07.227 に答える