ডেটা বাইন্ডিং ক্লাস তৈরি করা হয়নি


101

আমি আমার প্রকল্পে বাঁধাই ডেটা ব্যবহার করছি, যখন ব্যবহার <layout>এবং <data>আমার XML বাঁধাই ক্লাসে উত্পন্ন করা হয় না।

উদাহরণস্বরূপ আমার কাছে কার্যকলাপ_মাইন.এক্সএমএল আছে

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

এখন আমি যদি ActivityMainBindingআমার ক্রিয়াকলাপ / খণ্ডে লিখছি তবে এটি ত্রুটি দেখায় যে শ্রেণিটি উপলব্ধ নেই। তবে <variable>আমার এক্সএমএল ফাইল অন্তর্ভুক্ত করার পরে , এটি ActivityMainBindingশ্রেণি তৈরি করতে সক্ষম ।

অ্যান্ড্রয়েড স্টুডিও: 2.1.3
ক্লাসপাথ: com.android.tools.build:gradle:2.1.3
minSdkVersion 16
targetSdkVersion 24
buildToolsVersion 24.0.0


4
হয় dataBinding.enabledআপনার build.gradle মধ্যে?
pskink

4
আমি মনে করি এটি একটি পরিচিত ত্রুটি। অ্যাক্সেস করার চেষ্টা করার আগে আপনি আপনার প্রকল্পটি তৈরির চেষ্টা করতে পারেন ActivityMainBinding, বা এটি এই বাগ দিয়ে কিছু করতে হবে ।
ইয়েনসারাহ

@ পিএসকিঙ্ক হ্যাঁ এটি তাই, এটি <variable>এক্সএমএল যুক্ত করার পরে বাধ্যতামূলক শ্রেণি তৈরি করছে
রবি

@ অ্যামিলিন আমার প্রকল্প তৈরির পরে এটি উত্পন্ন করে, তবে আমার প্রশ্নটি যখন আমি লিখি <variable>, এটি বিল্ডিং প্রকল্প ছাড়াই বাধ্যতামূলক শ্রেণি তৈরি করে।
রবি

4
আমি আসল প্রশ্ন সম্পর্কে বিভ্রান্ত? <পরিবর্তনযোগ্য> যুক্ত করা যদি সমস্যার সমাধান করতে পারে তবে আপনি কেন তা করেন না? ভিউমোডেল (<পরিবর্তনযোগ্য>) ছাড়াই বাঁধাইয়ের পয়েন্টটি আমি পাই না
ktutnik

উত্তর:


228

আমি কোন সন্তোষজনক উত্তর পাই না। সুতরাং এখানে টিপস যা আমার ডেটা বাঁধাই জ্ঞানের সারাংশ।

ডেটাবাইন্ডিং সমস্যা সমাধানের টিপস

হালনাগাদ

আরও সঠিক ত্রুটি এবং পরামর্শ পেতে , আমি জোরালোভাবে অ্যান্ড্রয়েড স্টুডিও এবং গ্রেডল প্লাগইন সংস্করণটি সর্বশেষে আপডেট করার পরামর্শ দিচ্ছি। কারণ আমি এএস 3.2 সংস্করণের পরে অনেক সমস্যার মুখোমুখি হচ্ছি না।

দেখুন সর্বশেষ অ্যান্ড্রয়েড স্টুডিও , এবং সর্বশেষ Gradle প্লাগইন

অর্গিনাল সলিউশন

এই উত্তরটি পড়ার পরে, আপনি ক্লাস এবং ডেটা ভেরিয়েবল উভয়ের জন্য ডেটা বাইন্ডিং অটো জেনারেশনের সমস্যার মধ্যে আটকে যাবেন না

এই পয়েন্টগুলি একে একে পরীক্ষা করে দেখুন। এর মধ্যে যে কোনওটি আপনার কাজটি করতে পারে। 3 থেকে শেষ পয়েন্টটি সত্যই গুরুত্বপূর্ণ, তাই এগুলি মিস করবেন না।

1. ডেটা-বাঁধাই সক্ষম হয়েছে কিনা তা পরীক্ষা করুন

তোমার উচিত ছিল ডেটা সক্রিয় বাঁধাই মধ্যে build.gradle। যদি না হয় তবে এটি যুক্ত করুন এবং সিঙ্ক করুন

android {
...
   dataBinding {
        enabled = true
    }
...
}

2. চেক লেআউটটি বাইন্ডিং লেআউটে রূপান্তরিত হয়

এখন আপনি যদি ডাটা বন্ডিং ক্লাসটি তৈরি করতে চান তবে আপনার অবশ্যই ডেটা বাইন্ডিং ( ট্যাগ) দিয়ে মোড়ানোxml layout উচিত <layout। এটার মতো কিছু.

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

    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </android.support.constraint.ConstraintLayout>
</layout>

এই চেক সহ বন্ডিং ভেরিয়েবলের নামগুলি ভিউ মডেল ক্লাসের মতো সঠিক কিনা তা পরীক্ষা করে দেখুন

৩. স্বয়ংক্রিয়ভাবে উত্পাদিত বাইন্ডিং শ্রেণীর নাম?

আপনার ডেটা বাইন্ডিং ক্লাসটি বাইন্ডিং লেআউট তৈরির পরে তৈরি করা উচিত।

যদি আপনার লেআউটের নাম সাপের ক্ষেত্রে হয় activity_main.xml তবে উটের ক্ষেত্রে যেমন ডেটা বাইন্ডিং ক্লাস তৈরি করা হবে ActivityMainBinding

4. আমদানি পরামর্শ দেখতে পাচ্ছেন না?

কখনও কখনও আপনি যখন টাইপ করেন ActivityMai..., তারপরে এটি কোনও পরামর্শ প্রদর্শন করে না , সেক্ষেত্রে ম্যানুয়ালি আমদানি করুন

import <yourpackage>databinding.ActivityMainBinding;

5. বিল্ড ব্যর্থ লগক্যাট পড়ুন

আপনার বিল্ডিং ব্যর্থ হলে বিন্যাসে আপনার বাঁধাই করা শ্রেণি এবং নতুন ভেরিয়েবলগুলি উত্পন্ন হবে না। সুতরাং প্রথম মেক প্রকল্পের দ্বারা জন্য Ctrl + F9 চাপুন (বিল্ড> মেক প্রকল্প)

  • যদি কোনও বিল্ড ব্যর্থ হয় তবে ত্রুটিটি কী তা দেখুন, সাধারণত আমাদের বিন্যাস ক্ষেত্রগুলিতে ত্রুটি থাকে। ত্রুটি লগগুলি সমস্যাটির সাথে ত্রুটি লাইন নম্বরটি নির্দেশ করবে।
  • বাঁধাই ব্যর্থ হতে পারে কিছু বোকা ত্রুটির কারণ যেমন সিনট্যাক্স ত্রুটি বা আমদানি অনুপস্থিত। সেক্ষেত্রে আপনি বাধ্যতামূলক ক্লাসগুলির ত্রুটি দ্বারা পূর্ণ লগক্যাট পাবেন। কিন্তু আপনি সম্পূর্ণ Logcat পড়া উচিত করার উপযুক্ত ইস্যু খুঁজে

Close. সাম্প্রতিক থেকে বন্ধ এবং ওপেন প্রকল্প

আমি সবসময় এটি করি কারণ এটি Rebuild/ Makeপ্রকল্পের তুলনায় অনেক কম সময় নেয় ।

  • ফাইল> ক্লোজ প্রজেক্ট থেকে প্রকল্প বন্ধ করুন
  • সাম্প্রতিক থেকে আবার খুলুন

নোট করুন যে আমি সাম্প্রতিক থেকে ক্লোজ এবং ওপেন পছন্দ করি কারণ এটি পুনর্নির্মাণ / পুনঃসূচনা আইডিইয়ের তুলনায় অনেক কম সময় নেয় ।

7. প্রকল্প পুনর্নির্মাণ

তবুও যদি আপনার শ্রেণি উত্পন্ন না হয়। (কিছু সময় যখন আমরা লেআউট ফাইলটি পেস্ট করি, তখন এটি ঘটে)। তারপরে ( বিল্ড বা মেক প্রজেক্ট নয় ) থেকে প্রকল্পটি পুনর্নির্মাণ করুন । এটি আপনার ডেটা বাইন্ডিং ক্লাস তৈরি করবে। ( পুনর্নির্মাণ আমার জন্য ম্যাজিক আছে। )Build> Rebuild

৮. সর্বশেষতম অ্যান্ড্রয়েড স্টুডিও রাখুন

এএস অ্যান্ড্রয়েড স্টুডিও ৩.২-এ আপডেট করার পরে , আমি মনে করেছি যে ডেটা বাইন্ডিং অটো জেনারেশনে অনেকগুলি বাগ ঠিক করা হয়েছে। সুতরাং আপনার সর্বশেষ এএসও থাকা উচিত।

জন্য সমাধান <variables

<data>
    <variable
        name="item"
        type="com.package.Model"/>
</data>

সাধারণত, যখন আমরা বিন্যাসে একটি পরিবর্তনশীল রাখি, এটি এটির একটি গিটার এবং সেটার তৈরি করে। এবং আমরা ব্যবহার করতে পারি binding.setItem(item);এবং binding.getItem();, তবে আপনি যদি এই পদ্ধতিগুলি দেখতে না পান তবে নীচের তথ্যটি পড়ুন।

1. সাম্প্রতিক থেকে বন্ধ এবং ওপেন প্রকল্প

যদি আপনি কোনও ডেটা ভেরিয়েবল তৈরি করে থাকেন - <variableআপনার লেআউটে এবং এটি ডেটার বন্ডিং ক্লাসে এটির সেটার এবং গিটারটি প্রদর্শন করে না , তবে আপনার প্রকল্পটি বন্ধ করুন এবং সাম্প্রতিক থেকে খুলুন

প্রকারটি পরিবর্তন করার পরে প্রকল্পটি পরিষ্কার করুন

আপনি যদি <variableআপনার বিন্যাসে কিছুটির ধরণ পরিবর্তন করেন এবং গেটর সেটারের ধরণটি পরিবর্তন না হয় তবে ক্লিন প্রকল্প ( Build> Clean Project)

চূড়ান্ত শব্দ

অবশেষে যদি এখনও আপনার বাঁধাই করা শ্রেণি তৈরি না হয় তবে আমাদের কাছে আমাদের সবচেয়ে শক্তিশালী অস্ত্র have - অ্যান্ড্রয়েড স্টুডিও পুনরায় চালু করুন: ডি

  • প্রথমত, পুনরায় চালু করার চেষ্টা করুন, এটি পুনরায় আরম্ভের পরে সর্বদা আমার বাঁধার বিন্যাসের ভেরিয়েবল উত্পন্ন করে।
  • যদি এটি কাজ না করে তবে ক্যাশে ও পুনঃসূচনা অবৈধ করুন

আমার ডেটা বাইন্ডিং ত্রুটিগুলি সমাধান করার জন্য আমি এটাই করি। আপনি যদি আরও কোনও সমস্যা পান তবে আপনি এখানে মন্তব্য করতে পারেন।


4
যদি সমস্যাটি অব্যাহত থাকে ... (8) অবৈধ & পুনঃসূচনা করুন .... সমাধান না হলে, (9) ডেটাবাইন্ডিং {সক্ষম = মিথ্যা} ... বিল্ড পরিবর্তন করুন, এবং তারপরে ডেটাবাইন্ডিং {সক্ষম = সত্য} আবার বিল্ড করুন ....
প্রভিয়ানন্দাস


4
আমার ক্ষেত্রে, আমাকে ক্লাসপথটি ম্যানুয়ালি আমদানি করতে হয়েছিল কারণ কোনও কারণে আইডিই সমাধান হিসাবে এটি দেখায় না। টিএনএক্স :)
ইভান

4
আমার দিন বাঁচিয়েছে আমি আমার লেআউট ফাইলে <layout> মোড়কটি মিস করছি। ধন্যবাদ!
জুলিয়ানো

আপনি আরও যোগ করতে পারেন যে "আমদানি android.R" অপসারণ করতে হবে, যদি এর আমদানির তালিকার অংশ থাকে। এটি ক্রিয়াকলাপের এক্সএমএল ফাইলের অমীমাংসিত রেফারেন্স সহ আমার সমস্যার সমাধান করেছে
টিম জন

23

ডেটাবাইন্ডিং ক্লাস স্বয়ংক্রিয়ভাবে উত্পন্ন হয়।

যদি আপনার এক্সএমএল নামটি অ্যাক্টিভিটি_স্টেস্ট হয় তবে বাইন্ডিং ক্লাসটি অ্যাক্টিভিটিস্টেবাইন্ডিং হবে।

কিন্তু,

dataBinding {
        enabled = true
    }

বিন্যাসের মূল হিসাবে বিন্যাস থাকতে হবে

<layout xmlns:android="http://schemas.android.com/apk/res/android">
</layout>

আমি কয়েক ঘন্টা আত্মার সন্ধান করছি, গ্রেডেল ম্যাজিকটি অনেক তৈরি করি তবে আমি ConstraintLayoutমূল হিসাবে ব্যবহার করি । ধন্যবাদ!
আলেক্সি মার্কভ

14

আমারও একই প্রশ্ন ছিল. অ্যান্ড্রয়েড এসডিকে ডক্স পড়ার পরে, কেবলমাত্র প্রত্যাশিত ফাইলের নাম তৈরি করা হবে তবে তা না হলে কী করতে হবে সে সম্পর্কে কিছুই নেই। আমি আরও কিছু গবেষণার পরে লক্ষ্য করেছি যে নীচের মতো লেআউট উপাদানটির নামস্থানটি সরিয়ে দেওয়ার পরে (আপনার উদাহরণটি ব্যবহার করে), এটি আমার পক্ষে কাজ করেছে।

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

10

আমার ক্ষেত্রে, বাইন্ডিং ক্লাসটি তৈরি করা হয়েছিল এবং জায়গায় ছিল (তবে আমি ভেবেছিলাম এটি ছিল না) ... তবে এটি স্বয়ংক্রিয়ভাবে বলা শ্রেণীর ক্রিয়াকলাপ / খণ্ডের আমদানি বিভাগে আমদানি করে না ... সুতরাং ... বিকল্প + প্রবেশ করুন :)


4
বিঙ্গো, আমার পক্ষে কাজ করেছিল, যদিও আমাকে আমদানি নিজেই টাইপ করতে হয়েছিল, ইন্টেলিজেন্স যে কোনও কারণেই বিকল্পটি দিচ্ছিল না।
রব

8

এটি যথাযথভাবে সেট আপ করার পরে (xML নেমস্পেস সহ এবং সমস্ত কিছু মোড়ানো <layout>), যা আমার পক্ষে কাজ করেছিল সে বিল্ড -> প্রকল্প তৈরি করছিল। বা ক্লিন প্রকল্প বা পুনর্নির্মাণ প্রকল্প করেনি। আমি 26.0.2 বিল্ড সরঞ্জাম ব্যবহার করে অ্যান্ড্রয়েড স্টুডিও ২.৩.১ এ আছি। <data>ট্যাগের দরকার নেই ।


এটি সঠিক উত্তর হিসাবে চিহ্নিত করা উচিত। বাকি সব কেবল কর্মক্ষেত্র। নেমস্পেসগুলি স্থানান্তর করতে বা এমনকি ডেটা উপাদান যুক্ত করার দরকার নেই
ভিকি কাপাদিয়া

8

আপনি যদি বেস প্রকল্পটি করেন, আপনার প্রকল্পে ডেটাবেইন্ডিং সক্ষম করার জন্য, যেমন গ্রেডলে সক্ষম করুন এবং এক্সএমএলে লেআউট ট্যাগ ব্যবহার করুন , যখন আপনি এক্সএমএল কোড পরিবর্তন করেন এবং সেই এক্সএমএলটির জন্য নতুন ডাটাবেইন্ডিং শ্রেণি উত্পন্ন না করেন আপনি কেবল ডেটা প্রজন্মের জন্য একটি দ্রুত উপায় ব্যবহার করতে পারেন বাইন্ডিং ক্লাস গ্রেড-> অন্যান্য-> ডেটাবাইন্ডিংবেসক্লাসে বন্ডিং বুলিড পুরো প্রকল্পের চেয়ে দ্রুত এটি ডিবাগ করুন । এটি কেবল ডেটাবাইন্ডিং শ্রেণি উত্পন্ন করে। এখানে চিত্র বর্ণনা লিখুন


4
dataBinding {
        enabled = true
    }

নতুন ডেটা বাঁধাই সংকলক সক্ষম করতে, আপনার গ্রেড.প্রপার্টি ফাইলগুলিতে নিম্নলিখিত বিকল্পটি যুক্ত করুন:

android.databinding.enableV2=true

3

বিল্ড চলাকালীন ডেটা বাইন্ডিং ক্লাসগুলি তৈরি করা হয় তাই আপনি অ্যাপ্লিকেশনটির গ্রেডল বিল্ডে ডেটা বাইন্ডিং সক্ষম করার পরে এবং আপনার এক্সএমএলটিকে লেআউট ট্যাগ দিয়ে ঘিরে আপনার অ্যাপ্লিকেশনটি পুনর্নির্মাণ করা উচিত। এটি যদি সহায়তা না করে তবে আপনার বিল্ড ফোল্ডারটি মুছুন এবং আবার করুন।


2

আমি জানি না এটি আপনার পক্ষে কাজ করবে কি না। স্রেফ XML ফাইলের নামটির নাম পরিবর্তন করুন। ভালো লেগেছে অনুমান করা আপনার লেআউট নাম activity_main.xml শুধু পরিবর্তন মত কিছু তা নামান্তর main.xml এবং আবার তা নামান্তর activity_main.xml । তারপরে আপনি ক্রিয়াকলাপবেইনডে আমদানি বিকল্পটি দেখতে সক্ষম হন ।

আশা করি এটা তোমার জন্য কাজ করবে।


2

এই উত্তরের জন্য ধন্যবাদ - এটি দেখে মনে হচ্ছে "লেআউট নেমস্পেস "টি পরিষ্কার করা দরকার, অথবা আপনার একটি নতুন অনন্য নাম প্রয়োজন।

এখানে আমার জন্য কাজ করা বিকল্পগুলি:

  1. লেআউটটি উত্পন্ন হতে পারে তা নিশ্চিত করার জন্য একটি নতুন নাম তৈরি করুন। এটি আমার সমস্যার সমাধান করে, যেখানে আমার কাছে প্রথমে একটি বিন্যাস হয়েছিল যা ডেটা বাঁধাই ছাড়াই - আসুন আমরা এটি কল করি fragment_abc.xml। আমি যখন এটিতে ডেটা বাইন্ডিং যুক্ত করার চেষ্টা করেছি তখন এটি স্বীকৃত হয়নি - একাধিক ক্লিয়ার ক্যাশে ও কল পুনরায় চালু করার পরেও। যাইহোক, আমি লেআউটটির অনুলিপি করার সাথে সাথে fragment_abc2.xmlসাথেই আমি উত্পন্ন ডেটা-বাইন্ডিং। জাভা / .ক্লাস অবজেক্টটি পেয়েছি।

  2. উপরের কাজটি দেখার পরে, আমি মডিউলটি থেকে কেবল / বিল্ড ফোল্ডারটি সরিয়ে, এবং প্রকল্পটি পুনর্নির্মাণের চেষ্টা করেছি - এটি মূল লেআউটের জন্য ডেটা বন্ডিং পাওয়ার জন্য কাজ করেছে।


1

যদি সম্ভব না হয় তবেই সম্ভব যদি আমি কল্পনা করতে পারি

dataBinding {
    enabled true
}

আপনার গ্রেড ফাইল গ্রেড ফাইলটিতে এটি যুক্ত না করা মাত্র। অর্থাত্

android {
  ......

  dataBinding {
    enabled true
  }
}

তারপরে আপনার প্রকল্পটি সিঙ্ক করুন। এটি এখনও ব্যর্থ হলে আপনার অ্যান্ড্রয়েড স্টুডিওটির অবৈধ / পুনঃসূচনা করার প্রয়োজন হতে পারে


আমি আমার প্রশ্নে স্পষ্টভাবে উল্লেখ করেছি যে <variable>এক্সএমএল যুক্ত করার পরে এটি বাইন্ডিং ক্লাস উত্পন্ন করছে, সুতরাং dataBindingগ্রেড ফাইলটিতে যোগ না করার কোনও ঘটনা নেই , যদি আমি এটির চেয়ে যোগ না করি তবে বাধ্যতামূলক শ্রেণি উত্পন্ন করা উচিত নয়।
রবি

সিঙ্ক এবং পুনরায় চালু করার আগে। দয়া করে 'মেক' করার চেষ্টা করুন। এটি ওয়ার্কআউট হবে।
নিজামুদিন শেরিফ

1

আপনি যখন কোনও মাল্টিমিডুল অ্যান্ড্রয়েড অ্যাপ্লিকেশন নিয়ে কাজ করেন তখন আপনার বাধ্যতামূলক শ্রেণির পথটি পরীক্ষা করুন check হতে পারে আপনার ব্যবহার করা উচিত:

import com.yourcompany.app.android.modulename.databinding.FragmentABCtBinding পরিবর্তে:

import com.yourcompany.app.android.databinding.FragmentABCtBinding


1

লেআউটগুলি মুছুন এবং পূর্বাবস্থায় ফেরান, এবং নিশ্চিত হন যে উত্পন্ন বাঁধাই ক্লাসগুলি তার পরে সঠিকভাবে আমদানি করা হয়েছে।


1

আমার সমাধানটি ছিল শ্রেণীর নামে প্রত্যয় ফ্রেগমেন্টবাইন্ডিং হিসাবে নেওয়া।

প্রতিটি বিন্যাস ফাইলের জন্য একটি বাধ্যতামূলক শ্রেণি তৈরি করা হয়। ডিফল্টরূপে, শ্রেণীর নাম লেআউট ফাইলের নামের উপর ভিত্তি করে এটি পাস্কাল কেসে রূপান্তরিত করে এবং এর সাথে বাইন্ডিং প্রত্যয় যুক্ত করা হয়। উপরের লেআউট ফাইলের নামটি কার্যকলাপ_মাইন.এক্সএমএল তাই সম্পর্কিত উত্পন্ন শ্রেণিটি ক্রিয়াকলাপবাইনবাইন্ডিং। এই শ্রেণিটি বিন্যাসের বৈশিষ্ট্যগুলি (উদাহরণস্বরূপ, ব্যবহারকারীর ভেরিয়েবল) থেকে লেআউটের ভিউগুলিতে সমস্ত বাইন্ডিংগুলি ধারণ করে এবং কিভাবে বাধ্যতামূলক এক্সপ্রেশনগুলির জন্য মান নির্ধারণ করতে হয় তা জানে knows

ক্রিয়াকলাপ বা খণ্ড শ্রেণীর নামের নাম উপসর্গের ক্ষেত্রে পৃথক হতে পারে। কারণ প্রত্যয় সর্বদা বাঁধাই হয়।

খেমরাজ এবং অবৈধ ক্যাচ / পুনঃসূচনাটির প্রতিক্রিয়া অনুসরণ করার পরে , আপনার ইতিমধ্যে উত্পন্ন শ্রেণীর আইডিই পরামর্শ পেতে অ্যাক্টিভিটি বাইন্ডিং বা ফ্রেগমেন্টবাইন্ডিং পুনরায় লিখতে হবে এবং আমদানিটি হার্ডকোড করবেন না।

আমার ক্ষেত্রে আমি ক্লাসের নামটির FragmentCompetitionsBindingপরিবর্তে পিছনের দিকে আমদানি করার চেষ্টা করছিলাম CompetitionsFragmentBinding

জিএল

সূত্র


1

যদি উত্তরটি আপনার পক্ষে কাজ করে না, তবে আমার প্রস্তাবটি সহজ তবে কার্যকর।

ধারণাটি হ'ল সমস্যাটি তৈরি করা উপাদানগুলির মধ্যে কোনটি নির্ধারণ করা। আপনার সব লাইন এই, মন্তব্য করার জন্য custom_fragment.xmlএবং তার ব্যবহারসমূহ মধ্যে CustomFragment.ktনিচের মত ছেড়ে কিছু সংক্ষিপ্ত সংযুক্তি।

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/test"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</layout>

তারপরে Apply Code Changesঅ্যাপটি চালাও এবং অ্যাপটি ক্রাশ না হওয়া পর্যন্ত আপনি (Ctrl + Alt + F10) অ্যাপ্লিকেশনটিতে চালিত হওয়ার সময় উপাদানগুলিতে উপাদান যুক্ত করুন , যখন ত্রুটিটি খুঁজে পেয়েছেন।

ডেটা বাইন্ডিং লগগুলি কখনও কখনও এত বর্ণনামূলক হয় না এবং এটি ত্রুটিযুক্ত উপাদানটি সন্ধান করার জন্য একটি জেনেরিক কৌশল।

জিএল


0

আমারও একই সমস্যা ছিল আপনি যা কিছু করেছেন তা সঠিক। এক্সএমএলে ডেটা ট্যাগের অভ্যন্তরে আপনার পরিবর্তনশীল যুক্ত হওয়া দরকার। তার জন্য আপনার একটি নমুনা মডেল শ্রেণি তৈরি করা উচিত এবং এটি ডেটা ট্যাগে পরিবর্তনশীল হিসাবে যুক্ত করা উচিত।

যতক্ষণ না আপনি উত্পন্ন অ্যাক্টিভিটি মাইনবাইন্ডিং দেখতে পাবেন না।


0

আমার একই ধরণের সমস্যা হয়েছিল যেখানে আমার লেআউটটি মোড়ানো ছিল এবং গ্রেড ফাইলটিতে আমার ডেটা বাইন্ডিং সক্ষম করা হয়েছিল। প্রধান ক্রিয়াকলাপটি এখনও আমার ক্লাস দেখতে বা দেখতে পেল না। আমার জন্য এটি কী স্থির করে তা হ'ল বাঁধনশীল ভেরিয়েবল যুক্ত করে এবং যেভাবেই বাঁধাই আমদানি করছিল। সেখান থেকে আমি সলিউশনটি তৈরি করেছিলাম এবং তারপরে মনে হয়েছিল ক্লাসটি কী তা। সেখান থেকে আমি উত্পন্ন যে আমার উটের কেস ক্লাসগুলি আমদানি করতে সক্ষম হয়েছি।


0

আমি সমস্যাটি পেয়েছি এবং সমস্যাটি লেআউটে ছিল ক্ষেত্রটি ব্যবহৃত স্ট্রিং ছিল না, এটি একটি তারিখ ছিল।

দেখে মনে হচ্ছে যে সমস্ত ক্ষেত্র কমপক্ষে টেক্সভিউ উপাদান দিয়ে কাজ করার জন্য পাঠ্য হয়ে উঠেছে।

আপনি যদি কমান্ডটি দিয়ে তৈরি করেন। / গ্রেডলিউ বিল্ড - স্ট্যাকট্রেস

এটি ত্রুটিগুলি আরও ভাল দেখায়।


0

আমার ক্ষেত্রে, আমি ভেবেছিলাম যে উত্পন্ন ক্লাসটি srcফোল্ডারে আমার স্বাভাবিক ক্লাসগুলির সাথে উপস্থিত হতে হবে । এছাড়াও, আমি ভেবেছিলাম উত্পন্ন শ্রেণীর নামটি কিছুটা আলাদা হওয়া উচিত। এটা আমার ভুল ছিল। উত্পন্ন শ্রেণি buildফোল্ডার, build -> generated -> ...পাথে পাওয়া যাবে । আপনার ক্রিয়াকলাপে উত্পন্ন শ্রেণীর কোনও আমদানি না থাকলে আমদানি যুক্ত করুন

import com.yourcompany.app.databinding.ActivityMainBinding;"

0

আপনি যদি ডাটাবাইন্ডিং ইউটি.সেট কনটেন্টভিউতে নিম্নলিখিত ত্রুটিটি পান

অমীমাংসিত রেফারেন্স: ক্রিয়াকলাপ_মাইন

আপনাকে যা করতে হবে তা হ'ল নিম্নলিখিত আমদানি বিবৃতিটি সরিয়ে ফেলা

আমদানি android.R

আমি অন্য ফোরামে সমাধানটি পেয়েছি। সূত্র


0

যদি সম্প্রতি যে কোনও একটি বিদ্যমান প্রকল্পকে অ্যান্ড্রয়েডএক্সে স্থানান্তরিত করে থাকে তবে আপনার থেকে আমদানি প্রতিস্থাপন করা দরকার

import com.yourpackagename.BR;

প্রতি

import androidx.databinding.library.baseAdapters.BR;

গুগলের 2 দিন পরে অবশেষে সমাধান পেয়েছে, যা আমার পক্ষে কাজ করে।


4
সংস্থানীয় রিসোর্স (। বিআর। ) যেমন রিসোর্স ( .আর। )। এটি আপনার প্রকল্পের উত্স (আইডি, অঙ্কনযোগ্য, রঙ, ...) এর উপর ভিত্তি করে উত্পন্ন হয়েছে যাতে এটি আপনার প্রকল্প প্যাকেজের ( your.project.package.BR) মধ্যে স্থাপন করবে। তৃতীয় পক্ষের লাইব্রেরির মতো নয় androidx.databinding.library.baseAdapters.BR
দফতররা

0

এমন কেস রয়েছে যখন আপনি উত্পন্ন ডিরেক্টরিের অধীনে কোনও ফাইল দেখতে পাবেন না, আপনি এমন কোনও সম্পত্তি বাঁধাই করতে পারেন যা ভিউমডেলে ঘোষণা করা হয়নি। আপনি যদি এক্সএমএল করে থাকেন তবে এটি অবশ্যই আপনাকে লিন্টের ত্রুটি দেয় না।


0

আপনি যদি সিরিয়ালাইজেবল -> বাস্তবায়ন করেন তবে আপনাকে অবশ্যই এটি প্রয়োগ করতে হবে সিরিয়ালাইজেবল

অন্যথায় আপনি এই ত্রুটি পাবেন। আশা করি এটি ভবিষ্যতে কাউকে সহায়তা করবে

আমার ক্ষেত্রে আমি পার্সেল লাইব্রেরি ব্যবহার করি। আমি আমার সাব ক্লাসে @ পার্সেলটি বর্জন করতে মিস করেছি


0

উপরের পদক্ষেপগুলি ছাড়াও, আপনি চলক প্রকারটিও পরীক্ষা করতে পারেন। এটি টেক্সটভিউর জন্য স্ট্রিং বা এর মধ্যে সংজ্ঞায়িত একইরূপে নিশ্চিত করুন BindingAdapter। উদাহরণ স্বরূপ:

data class MyDataObject(val name: String, val age: Int)

এবং এক্সএমএলে:

android:text="@{dataobject.age}"

এটি উপরের ত্রুটির কারণ হবে। ঠিক করতে আপনি হয় স্ট্রিংয়ের বয়স পরিবর্তনশীল করতে পারেন বা আপনি আপনার এক্সএমএলে স্ট্রিং আমদানি করতে পারেন এবং String.valueOf(age)নিম্নলিখিত হিসাবে ব্যবহার করতে পারেন :

<data>
    <import type="String" />
...
</data>

এবং আপনার টেক্সটভিউতে:

android:text="@{String.valueOf(dataobject.age)}"

0

আমার ক্ষেত্রে, ডেটা বাইন্ডিং ক্লাসগুলি তৈরি করা হয়নি কারণ আমি মিপম্যাপ অ্যান্ড্রয়েড রিসোর্স ডিরেক্টরি মুছে ফেলেছি। আমি রেজ / মিপম্যাপ / ডিরেক্টরিটি পুনরায় তৈরি করেছি এবং ডেটা বাইন্ডিং ক্লাসগুলি পুনঃস্থাপন করা হয়েছে।


0

আমি একই ধরণের সমস্যার মুখোমুখি হয়েছি যেখানে ডেটাবাইন্ডিং বাইন্ডিংআইপিএল ক্লাস তৈরি করতে ব্যর্থ হয়েছিল । আমার ক্ষেত্রে ডেটা ক্লাসে এমন একটি পদ্ধতি থেকে সমস্যা ছিল যেখানে নামটি ভুল ব্যবহৃত হয়েছিল: এই মডেলটিতে একটি পদ্ধতি ছিল onSignInCliked () এবং লেআউটে আমি সাইনিনক্লিকড () ব্যবহার করেছি । সাইন ইন বনাম সাইন ইন লক্ষ্য করুন ।

ত্রুটি বার্তাটি পর্যাপ্ত ছিল না এবং আমি স্ট্যাক-ট্রেস বিকল্পের সাহায্যে বিল্ড স্ক্রিপ্টটি ব্যবহার করলেই আমি বিষয়টি আবিষ্কার করেছি।


0

ডেটা বাঁধাই সক্ষম হয়েছে তা নিশ্চিত করুন

android {
...
   dataBinding {
        enabled = true
    }
...
}

গ্রেড সহ প্রকল্প সিঙ্ক করুন ডান বোতামটি ক্লিক করুন (গ্রেডলের সাথে সিঙ্ক প্রকল্প)


0

আপনার এক্সএমএল ফাইল নিয়ে যদি সমস্যা হয় তবে ডেটাবাইন্ডিং ক্লাসটি তা করবে না উত্পন্ন । এক্সএমএল ফাইলটি চালানো এবং সিনট্যাক্স ত্রুটিগুলি (যা সাধারণত লাল রঙে হাইলাইট করা হয়) পরীক্ষা করা একটি দ্রুত সমাধান fix ত্রুটিগুলি অ-বিদ্যমান বা ভুল উল্লেখ, টাইপোগ্রাফিক ত্রুটি ইত্যাদির আকারে আসতে পারে

সংক্ষেপে, কেবল আপনার XML কোডে কোনও লাল-আন্ডারলাইন রেখা নেই তা নিশ্চিত করুন। আপনি হয়ে গেলে, পুনর্নির্মাণ করুন এবং আপনার ডেটাবাইন্ডিং ক্লাস উত্পন্ন হত।


-1

অ্যাপ্লিকেশন গ্রেডের নীচে যুক্ত করুন

 dataBinding {
        enabled = true
    }

২.আইএমএল লেআউটে কোডের নীচে লিখুন

<layout
    xmlns:android="http://schemas.android.com/apk/res/android">
  <data></data>
</layout>if you don't get data binding class just rename the layout file name and you will get data binding class.

4
সাধারণ ক্ষেত্রে ডেটাবাইন্ডিংয়ের জন্য ইন্টারনেটের অনুমতি লাগবে কেন?
এম.পোমরোয়

4
@ এম.পোমরোয় হ্যাঁ এটি প্রয়োজন হয় না, উত্তরটি সম্পাদিত হয় না ধন্যবাদ
রোহান

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