Skip to content

۲. سناریو رایج اندروید: کار با UI (تبدیل View به TextView) ​

در توسعه اندروید، متد معروف findViewById همیشه یک View کلی برمی‌گرداند. اما اگر بخواهید متن داخل آن را بخوانید (getText)، باید آن را به TextView یا EditText تبدیل (Cast) کنید.

کد جاوا (کد اصلی اندروید):

java
/* در اندروید، این متد یک View کلی برمی‌گرداند */
View myView = activity.findViewById(R.id.username_field)

/* برای خواندن متن، برنامه‌نویس جاوا هم باید کست کند: */
/* 
    EditText edit = (EditText) myView
    String text = edit.getText().toString() 
*/

کد فریدا (تبدیل View به EditText):

javascript
Java.perform(function () {
    var View = Java.use("android.view.View")
    var EditText = Java.use("android.widget.EditText")

    /* فرض کنید متدی را هوک کرده‌ایم که یک View به ما می‌دهد */    
    /* مثلا داریم روی تمام Viewهای یک اکتیویتی می‌چرخیم... */    
    
    /* ... (کد فرضی دریافت viewInstance) ... */    
    
    try {
        /* تبدیل View معمولی به EditText */        
        var editTextInput = Java.cast(viewInstance, EditText)
        
        /* حالا می‌توانیم getText() را صدا بزنیم که در کلاس View وجود نداشت */        
        console.log("Input Text: " + editTextInput.getText().toString())
        
    } catch (e) {
        console.log("[-] This view was not an EditText: " + e.message)
    }
})

خطر کرش (ClassCastException)

دقیقا مثل جاوا، اگر سعی کنید یک شیء را به کلاسی تبدیل کنید که ربطی به آن ندارد (مثلا تبدیل Button به String)، اپلیکیشن بلافاصله کرش می‌کند. همیشه قبل از کست کردن مطمئن شوید شیء واقعا از آن نوع است.