অ্যান্ড্রয়েড: অ্যান্ড্রয়েড.কন্টেন্ট.রেস রিসোর্সগুলি $ নটফাউন্ডএক্সেপশন: স্ট্রিং রিসোর্স আইডি # 0x5


158

আমি আমার অ্যাপটি চালানোর সময় শিরোনাম থেকে ব্যতিক্রম পাই। এটি যা করে তা হ্যাঙ্গম্যান গেমের শব্দের সাথে একটি .txt ফাইল রয়েছে এবং আমি মনে করি ফাইলটি অ্যাক্সেস করার সময় ব্যতিক্রম ছুঁড়ে দেওয়া হয়েছে। আমার ফাইল, cuvinte.txt / সম্পত্তিতে / এ অবস্থিত। এখানে আমার কোড (আমি লেআউট / এক্সএমএল অংশটি এড়িয়ে গেছি, যা ভাল কাজ করে):

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

নতুন গেম বোতামটি ফাংশনটিকে উভয়ই বলা হয় যখন নতুন গেমের বোতাম টিপানো হয় এবং ক্রিয়াকলাপের শুরুতে, অনক্রিট () ফাংশনে।


আপনার পাঠকদের সাথে শেষ করার পরে আপনার তাদের বন্ধ করা উচিত
গুবাত্রন

1
পেশাদারিত্বের স্বার্থে, দয়া করে ইংরেজিতে আপনার ভেরিয়েবলের নাম দিন :)
মেটেই সুইকা

1
আমার ক্ষেত্রে, আমি এটি অনুভব করেছি কারণ আমি কোনও setText()ফাংশনের অভ্যন্তরীণ পরামিতিটি পাস করার চেষ্টা করছিলাম ।
তাসলিম ওসেনি

উত্তর:


548

(কেবল অনুমান, ব্যতিক্রম স্ট্যাকট্রেসের কম তথ্য)

আমি মনে করি, এই লাইনটি incercari.setText(valIncercari);ব্যতিক্রম ছোঁড়ে কারণ valIncercariএটিint

সুতরাং এটি হওয়া উচিত,

incercari.setText(valIncercari+"");

অথবা

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

15
বা আরও ভাল:Integer.toString(valIncercari);
জাভে

6
স্ট্রিং.ওয়ালুওফ () এর মতোই; যা Integer.toString এবং অন্যান্য স্ব স্ব স্ট্রিং পদ্ধতিগুলিতে কল করে
জান রাবে

4
আমি ভাবছি কেন অ্যান্ড্রয়েড স্টুডিও আপনাকে পরামর্শ দেয় না। ত্রুটির জন্য টেক্সটভিউ.সেটটেক্সটে কোনও মান মান সেট করতে আমার একই সমস্যা হয়েছিল।
bheatcoker

2
@ ভিয়েটকার - কারণ setText(int)আইডি দিয়ে স্ট্রিং রিসোর্স পেতেও ব্যবহৃত হত। এবং অ্যান্ড্রয়েডে সমস্ত সংস্থান আইডির intমান রয়েছে।
ব্যবহারকারী370305

1
স্ট্রিং.ফর্ম্যাট প্রস্তাবিত উপায়। সেটটেক্সট (স্ট্রিং.ফর্ম্যাট (লোকেল.ইউএস, "% ডি", ভ্যালেন্সারসারি));
জেফ্রে

15

আপনি যদি নিজের অ্যাপ্লিকেশানের একটি অনুবাদে একটি স্ট্রিং রিসোর্স সংজ্ঞায়িত করেন তবে ডিফল্ট স্ট্রিং সংস্থান সরবরাহ না করেন তবে এই ত্রুটিটি ফেলে দেওয়া যেতে পারে তার অন্য একটি কারণটি কেবল উল্লেখ করতে চেয়েছিলেন।

ইস্যুর উদাহরণ:

আপনি নীচে দেখতে পাচ্ছেন, আমার কাছে স্প্যানিশ স্ট্রিং "get_start" এর স্ট্রিং রিসোর্স ছিল। এটি কোডে এখনও উল্লেখ করা যেতে পারে, তবে ফোনটি যদি স্প্যানিশ না হয় তবে ফোন করার সময় এটি লোড এবং ক্রাশ করার কোনও সংস্থান থাকবে না 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>

মান-bn / strings.xml

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

মান-স্প্যানিশ ভাষায় / strings.xml

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

মান-ডি / strings.xml

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

যখন আমি একটি অ্যান্ড্রয়েড স্টুডিও প্রকল্প থেকে অন্যটিতে সংস্থানগুলি অনুলিপি করেছিলাম এবং আমি স্ট্রিং.এক্সএমএল ফাইলটি অনুলিপি করি তখন এটি হিট হয়। কিছু ক্যাশে / পুনরায় লোডিং / যা-ই হোক না কেন এটি নতুন ফাইলটিকে ফেলে দেয় এবং পুরানোটিকে রেখে দেয়। সুতরাং আমার কাছে অনুবাদ থেকে স্ট্রিং আইডি ছিল তবে সরল স্ট্রিং.এক্সএমএল থেকে নয়
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>

লক্ষ্য করুন যে পরিবর্তনশীলটি আমি ব্যবহার করছি এটি একটি পূর্ণসংখ্যা এবং আমি এটিকে টেক্সটভিউয়ের পাঠ্য ক্ষেত্রে বরাদ্দ করছি। যেহেতু টেক্সটভিউতে ইতিমধ্যে এর স্বাক্ষরযুক্ত একটি পদ্ধতি রয়েছে এবং মানটি setText(int)ব্যবহার করার পরিবর্তে এই পদ্ধতিটি ব্যবহার করবে setText(String)। সুতরাং টেক্সটভিউ আপনার ইনপুট নম্বরটিকে একটি সংস্থান মান হিসাবে মনে করে যা স্পষ্টতই বৈধ নয়।

সমাধানটি আপনার int মানকে এই জাতীয় স্ট্রিংয়ে ফেলে দেওয়া হয়

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

এটি কার্যকর হবে না এবং একসময় আমরা স্ট্রিং.এক্সএমএল ফাইল থেকে সংস্থানটি পাই না তবে এই ধরণের ত্রুটি দেখা দেয়।


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)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.