Android: android.content.res.esource $ NotFoundException: स्ट्रिंग संसाधन ID # 0x5


158

मुझे अपना ऐप चलाने पर शीर्षक से अपवाद मिलता है। यह क्या करता है यह एक जल्लाद खेल के लिए शब्दों के साथ एक .txt फ़ाइल है और मुझे लगता है कि फ़ाइल को एक्सेस करते समय अपवाद फेंक दिया जाता है। मेरी फ़ाइल, cuvinte.txt / आस्तियों / में स्थित है। यहाँ मेरा कोड है (मैंने लेआउट / xml भाग को छोड़ दिया, जो ठीक काम करता है):

public void onCreate() {
    // all the onCreate() stuff, then this:
    try {
        AssetManager am = this.getAssets();
        InputStream is = am.open("cuvinte.txt");
        InputStreamReader inputStreamReader = new InputStreamReader(is);
        BufferedReader b = new BufferedReader(inputStreamReader);
        String rand;
        while((rand=b.readLine())!=null){
            cuvinte.add(rand);
        }
    } catch (IOException e) {
        Toast.makeText(this, "No words file", Toast.LENGTH_LONG).show();
        e.printStackTrace();
    }

    newGame(newG);
}

public void newGame(View view){
    Random rand = new Random();
    String stringCuvant = cuvinte.get(rand.nextInt(cuvinte.size()));
    cuvant.setText("");
    System.out.println(stringCuvant);
    for(int i = 0; i< stringCuvant.length(); i++){
        cuvant.append("_ ");
    }
    incercari.setText(valIncercari);
}

फंक्शन newGame () दोनों को कहा जाता है जब नया गेम बटन दबाया जाता है और गतिविधि की शुरुआत में ऑनक्रीट () फ़ंक्शन में होता है।


आपके द्वारा किए जाने के बाद आपको उन पाठकों को बंद कर देना चाहिए
Gubatron

1
व्यावसायिकता के लिए, कृपया अपने चरों का नाम अंग्रेजी में :)
मतेई सुइका

1
मेरे मामले में, मुझे यह अनुभव हुआ क्योंकि मैं एक setText()फ़ंक्शन के अंदर एक अंतर पैरामीटर पास करने की कोशिश कर रहा था ।
तसलीम ओसेनी

जवाबों:


548

(बस धारणा, अपवाद स्टैक्ट्रेस की कम जानकारी)

मुझे लगता है, इस लाइन, incercari.setText(valIncercari);अपवाद फेंकता है क्योंकि valIncercariहैint

तो यह होना चाहिए,

incercari.setText(valIncercari+"");

या

incercari.setText(Integer.toString(valIncercari));

15
या इससे भी बेहतर:Integer.toString(valIncercari);
जव

6
String.valueOf () के समान; जो कॉल करता है Integer.toString और अन्य संबंधित संबंधित तरीकों
जन राबे

4
मैं सोच रहा हूं कि एंड्रॉइड स्टूडियो आपको सलाह क्यों नहीं देता है। त्रुटि के लिए TextView.setText में एक अंतर मान सेट करने में मुझे समान समस्या थी।
bheatcoker

2
@bheatcoker - क्योंकि setText(int)आईडी द्वारा स्ट्रिंग संसाधन प्राप्त करने के लिए भी उपयोग किया जाता है। और एंड्रॉइड में सभी संसाधन आईडी का intमूल्य है।
user370305

1
String.format अनुशंसित तरीका है। setText (String.format (Locale.US, "% d", valIncercari));
जेफरी

15

बस एक और कारण बताना चाहता था कि यह त्रुटि हो सकती है यदि आपने अपने ऐप के एक अनुवाद के लिए एक स्ट्रिंग संसाधन परिभाषित किया है लेकिन एक डिफ़ॉल्ट स्ट्रिंग संसाधन प्रदान नहीं किया है।

मुद्दे का उदाहरण:

जैसा कि आप नीचे देख सकते हैं, मेरे पास एक स्पेनिश स्ट्रिंग "get_started" के लिए एक स्ट्रिंग संसाधन था। यह अभी भी कोड में संदर्भित किया जा सकता है, लेकिन अगर फोन स्पेनिश में नहीं है, तो कॉल करते समय लोड और क्रैश होने का कोई संसाधन नहीं होगा getString()

मान-एस / strings.xml

<string name="get_started">SIGUIENTE</string>

संसाधन का संदर्भ

textView.setText(getString(R.string.get_started)

logcat:

06-11 11:46:37.835    7007-7007/? E/AndroidRuntime FATAL EXCEPTION: main
Process: com.app.test PID: 7007
android.content.res.Resources$NotFoundException: String resource ID #0x7f0700fd
        at android.content.res.Resources.getText(Resources.java:299)
        at android.content.res.Resources.getString(Resources.java:385)
        at com.juvomobileinc.tigousa.ui.signin.SignInFragment$4.onClick(SignInFragment.java:188)
        at android.view.View.performClick(View.java:4780)
        at android.view.View$PerformClick.run(View.java:19866)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

समस्या का समाधान

इसे रोकना काफी सरल है, बस यह सुनिश्चित करें कि आपके पास हमेशा एक डिफ़ॉल्ट स्ट्रिंग संसाधन हो values/strings.xmlताकि यदि फोन किसी अन्य भाषा में हो तो उसके पास वापस गिरने के लिए हमेशा एक संसाधन होगा।

मान / strings.xml

<string name="get_started">Get Started</string>

मान-en / strings.xml

<string name="get_started">Get Started</string>

मान-एस / strings.xml

<string name="get_started">Siguiente</string>

मान-de / strings.xml

<string name="get_started">Ioslegen</string>

यह एक हिट है जब मैंने एक एंड्रॉइड स्टूडियो प्रोजेक्ट से दूसरे में संसाधनों की नकल की और मैंने स्ट्रिंग्स.एक्सएमएल फ़ाइल की प्रतिलिपि बनाई। कुछ कैशिंग / रीलोडिंग के कारण / जो कुछ भी नई फ़ाइल को त्याग दिया और पुराने को रखा। इसलिए मैं अनुवाद से स्ट्रिंग आईडी था, लेकिन सादे string.xml से नहीं
denispyr

14

एक अन्य परिदृश्य जो इस अपवाद का कारण बन सकता है वह है डेटाबाइंडिंग, जब आप अपने लेआउट में कुछ इस तरह का उपयोग करते हैं

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

        <variable
            name="model"
            type="point.to.your.model"/>
    </data>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@{model.someIntegerVariable}"/>

</layout>

ध्यान दें कि मैं जिस वेरिएबल का उपयोग कर रहा हूं वह एक इंटेगर है और मैं इसे टेक्स्ट व्यू के टेक्स्ट फील्ड में असाइन कर रहा हूं। चूँकि TextView के पास पहले से ही एक विधि है जिसके हस्ताक्षर के साथ मूल्य setText(int)का उपयोग करने setText(String)और डालने के बजाय इस पद्धति का उपयोग किया जाएगा । इस प्रकार TextView आपके इनपुट नंबर को संसाधन मान के रूप में मानता है जो स्पष्ट रूप से मान्य नहीं है।

समाधान इस तरह से स्ट्रिंग के लिए अपने अंतर मूल्य को डालना है

android:text="@{String.valueOf(model.someIntegerVariable)}"

धन्यवाद, इससे मदद मिली। इसके बाद आपको डेटा बाइंडिंग कक्षाओं को फिर से बनाने के लिए एंड्रॉइड स्टूडियो में Build-> की आवश्यकता है Clean Project
यमाशीरो रियान

9

यह समस्या ज्यादातर setText()विधि में त्रुटि के कारण होती है

समाधान सरल प्रकार में Integerपरिवर्तित करके अपना मूल्य रखा हैstring

textview.setText(Integer.toString(integer_value));

1

शायद ही कभी किसी स्रोत को पसंद न करने के कारण ऐसा हुआ हो, अगर मैं एडॉप्टर से टेक्स्टव्यू में टेक्स्ट सेट करना चाहता हूं तो मुझे इस्तेमाल करना चाहिए

 textView.setText(""+name);

अगर आप ऐसा कुछ लिखते हैं

 textView.setText(name);

यह काम नहीं करेगा और कुछ समय में हम स्ट्रिंग.xml फ़ाइल से संसाधन नहीं खोजते हैं तब इस प्रकार की त्रुटि होती है।


0

डेटाबाइंड का उपयोग करना और ड्रॉबल फोल्डर से संसाधनों के साथ एडिटटेक्स्ट के लिए बैकग्राउंड सेट करना अपवाद का कारण बनता है।

<EditText
                            android:background="@drawable/rectangle"
                            android:imeOptions="flagNoExtractUi"
                            android:layout_width="match_parent"
                            android:layout_height="45dp"
                            android:hint="Enter Your Name"
                            android:gravity="center"
                            android:textColorHint="@color/hintColor"
                            android:singleLine="true"
                            android:id="@+id/etName"
                            android:inputType="textCapWords"
                            android:text="@={viewModel.model.name}"
                            android:fontFamily="@font/avenir_roman"/>

उपाय

मैं बस से पृष्ठभूमि को बदलने android:background="@drawable/rectangle"के लिए android:background="@null"

स्वच्छ और परियोजना का पुनर्निर्माण।


-1

आप किसी पाठ फ़ील्ड में एक संख्यात्मक मान निर्दिष्ट कर रहे हैं। आपको संख्यात्मक मान को स्ट्रिंग में बदलना होगा:

String.valueOf(variable)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.