Android كيفية قراءة أصل من خارج النشاط الرئيسي
سؤال
يجب أن أكون قادرًا على الاتصال بـ READASSET من خارج النشاط الرئيسي لتطبيقي. لقد سمعت أن الناس يذكرون الحاجة إلى تمرير السياق ، لكن اللغة كانت غامضة للغاية. هل يمكن لأي شخص أن يصف الخطوات اللازمة لإضافة القدرة على استدعاء READASSET إلى فئة موجودة ليست النشاط الرئيسي؟ إن إنشاء وظيفة عامة في النشاط الرئيسي واتصال الآخرين لن يعمل كمكان أحتاج إلى إضافة ReadAsset إليه ، في سلسلة رسائل منفصلة.
المحلول
public class NonActivity {
public void doStuff(Context c) {
//read from assets
c.getAssets();
//use assets however
}
}
لست متأكدًا مما تطلبه ، ولكن ربما شيء من هذا القبيل؟ فقط أضف إلى الفئة الحالية ، واستخدم السياق لاسترداد الأصول. في نشاطك ، اتصل بالطريقة مثل هذه:
public class MyActivity extends Activity {
public void OnCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
NonActivity n = new NonActivity();
n.doStuff(this);
}
}
نصائح أخرى
ملاحظة يجب أن يتم إدخال جميع إمكانية الوصول إلى نظام الملفات الرئيسية ، لذلك يجب ألا تقرأها أثناء onCreate (). بدلاً من ذلك ، يجب عليك استخدام موضوع آخر ، كما هو موضح بواسطة Aysnctask.
لقراءة الأصول ، تحتاج Context
, ، لكنك لا يجب أن تستخدم Activity
مثلك Context
; ؛ يمكنك استخدام ال Application
كائن بدلاً من ذلك.
سياق Android دون أن يكون في نشاط؟ وغيرها من البرمجة أقل نشاط؟
public class MyApplication extends Application {
private static MyApplication instance;
public MyApplication() {
instance = this;
}
public static MyApplication getInstance() {
return instance;
}
}
ستحتاج إلى إضافة ملف android:name
تنسب إلى <application>
عنصر في AndroidManifest.xml
أول:
<application android:name="com.example.MyApplication" ... />
الآن يمكنك الاتصال MyApplication.getInstance().getAssets()
ثابتة من أي مكان.
بالتناوب ، يمكنك استخدام خنجر حقن التبعية لحقن Application
مباشرة في كائنك. (حقن Application
السياق صعب بعض الشيء. نرى الخنجر 2 حقن سياق Android و هذه القضية مقدمة على الخطر Github repo.)