بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
{آموزش} استفاده از جاوا Reflection
با سلام خدمت دوستان
میخواستم یک نکته در خصوص استفاده از جاوا Reflection رو خدمت بگم که ساعت ها وقت من روگرفت.
در صورتی که از جاوا Reflection برای شناسایی خودکار view ها استفاده میکنید (استاد در قسمت جاوا Reflection بطور کامل توضیح دادند) یا از proGuard استفاده نکنید یا درصورت استفاده از proGuard باید در فایل proGuard مشخص کنید که فیلد های کلاس رو opCode نکنه.
برای فهم بیشتر من طبق آموزش استاد در قسمت جاوا Reflection یک مثال میزنم :
public class ActivityMain extends ActivityEnhanced {
public class Ui extends HelperUi {
public RelativeLayout layoutFirst;
public RelativeLayout layoutSecond;
public EditText edtUserInput;
public Ui(View view) {
parseUi(view);
layoutFirst.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
layoutSecond.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_choose_user);
Ui ui = new Ui(getWindow().getDecorView());
}
}
public class HelperUi {
public void parseUi(View view) {
Field[] fields = this.getClass().getFields();
for (Field field : fields) {
int id = G.resource.getIdentifier(field.getName(), "id", G.packageName);
try {
field.set(this, field.getType().cast(view.findViewById(id)));
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
طبق کد زیر هم مشخص میکنم که فیلد های کلاس Ui موجود در اکتیویتی opCode نشوند وگرنه تبدیل به یه چیزی تو مایه های a.b.c و a.b.d و ... می شوند و برنامه به خاطر nullPointerException کرش میکنه.
-keep public class xx.xx.xxx.*$Ui {
public <fields>;
}
به جای x ها هم پکیج برنامه رو بزارید.
برای این سوال پاسخی وجود ندارد.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .