6

बस अचानक एंड्रॉइड के लिए मेरी बाइंडिंग काम करना बंद कर दिया, जो कुछ भी मैं अब बना रहा हूं, मुझे बस यह संदेश मिलता है।एंड्रॉइड बाइंडिंग्स काम करना बंद कर दिया

त्रुटि: निष्पादन कार्य के लिए विफल रहा ': app: compileDevDebugJavaWithJavac'।

java.lang.RuntimeException: Found data binding errors. ****/ data binding error ****msg:Cannot find the getter for attribute 'android:text' with value type java.lang.String on android.widget.EditText. file:C:\path\to\layout\layout.xml loc:85:12 - 96:54 ****\ data binding error ****

मैं क्या कोशिश की है

पहले यह बाइंडिंग सुझाव दिया गया था संकलन नहीं होगा अगर वहाँ मेरी फ़ाइलों में त्रुटियाँ हैं, इसलिए सभी लेआउट फ़ाइलें निकाल जहाँ मैं एक फाइल करने के लिए बाइंडिंग का इस्तेमाल किया layout.xml। वहाँ मैं

<EditText 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:text="@{model.name}" /> 

है ... और यह अच्छी तरह से काम करता है, फिर भी अगर मैं दो तरह से बाध्यकारी android:text="@={model.name}" यह पिछले त्रुटि फेंकता जोड़ें।

अगला, मैं

@InverseBindingAdapter(attribute = "android:text") 
public static String captureEditTextValue(EditText view) { 
    return view.getText().toString(); 
} 

जोड़ने ... तो यह नए त्रुटि फेंकता है।

त्रुटि: निष्पादन कार्य के लिए विफल रहा ': app: compileDevDebugJavaWithJavac'।

java.lang.RuntimeException: Found data binding errors. ****/ data binding error ****msg:Could not find event 'android:textAttrChanged' on View type 'android.widget.EditText' file:C:\Users\EdgeTech\AndroidStudioProjects\purse\purse-customer\app\src\main\res\layout\get_phone_layout.xml loc:85:12 - 96:54 ****\ data binding error ****

आगे चला गया, इस

@InverseBindingAdapter(attribute = "android:text", event = "android:textAttrChanged") 
public static String captureEditTextValue(EditText view) { 
     return view.getText().toString(); 
} 

को refactor करने के लिए ... अब भी पिछले त्रुटि देता है।

मेरे सेटअप

  • एंड्रॉयड स्टूडियो: 2.3.3
  • Gradle बिल्ड उपकरण: 2.3.3
+0

यह दो तरह से बाध्यकारी, 'एंड्रॉयड की बात आती है: पाठ =" @ = {model.name} "' इस लाइन, यदि आपका चर 'है स्ट्रिंग' पर्याप्त है आप तो अन्य डेटाटाइप्स है, तो आप उलटा करने की जरूरत है बंधन। –

+0

@RaviRupareliya हाँ इसकी 'एक स्ट्रिंग। – oreofeolurin

+0

जैसा कि मैंने पहले ही बताया है, यदि यह 'स्ट्रिंग' है, तो 'इनवर्क्स बाइंडिंग' बिल्कुल आवश्यक नहीं है। –

उत्तर

3

दो तरह से बाध्यकारी जरूरतों:

ObservableField<T> 
उदाहरण के लिए

:

@InverseBindingAdapter(attribute = "android:text") 
public static String captureEditTextValue(EditText view) { 
    return view.getText().toString(); 
} 

को viewModel.class में

public ObservableField<String> productName = new ObservableField<>(); 

लेआउट में।xml:

<EditText 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:text="@={viewModel.productName}" /> 
2

के रूप में मैं नहीं मानता कि इसके लिए जरूरी है कि InverseBindingAdapter से छुटकारा एक स्ट्रिंग।

फिर, अपने संपादन टेक्स्ट एक्सएमएल टैग में, android:text="@={model.name} ->android:text="@={`` + model.name}" बदलें।

+0

कृपया मुझे बताएं अगर यह आपकी समस्या को ठीक नहीं करता है। मुझे लगता है कि आप एंड्रॉइड 2.3+ (बग फिक्स के लिए न्यूनतम समर्थन) पर चल रहे हैं, इसलिए यह समाधान समस्या को हल कर सकता है। –

1

तुम बस बदलने के लिए सक्षम होना चाहिए: इस प्रकार के

@InverseBindingAdapter(attribute = "android:text") 
public static String getText(TextView view) { 
    return view.getText().toString(); 
} 
1

धन्यवाद,

हालांकि यह अब काम कर रहा है। मैंने अपने बिल्ड टूल्स और एसडीके प्लेटफार्म टूल्स को संस्करण में अपग्रेड करने के बाद वापस काम करना शुरू कर दिया। अभी भी यह सुनिश्चित नहीं है कि यह संस्करण के साथ क्यों टूट रहा था।

मैं कोई लाभ नहीं हुआ सब समाधान प्रदान की गयी सभी की कोशिश की, है, यह उन्नयन, एकमात्र समाधान है कि मेरे लिए काम किया था।

संबंधित मुद्दे