كيف تجبر قيمة البيانات الوصفية على كتابة السلسلة؟

StackOverflow https://stackoverflow.com/questions/2154945

  •  23-09-2019
  •  | 
  •  

سؤال

لقد حددت بيانات meta في manysest.xml مثل هذا:

<meta-data android:value="5555555555" android:name="foo"></meta-data>

عند الوصول إلى بيانات التعريف مثل هذا:

ActivityInfo ai = act.getPackageManager().getActivityInfo(componentName, PackageManager.GET_META_DATA);
Object value = (Object)ai.metaData.get(key);

يتم تفسير هذه القيمة على أنها int و - الأهم من ذلك - متشابكة بشكل غير صحيح (1260588259).

نظرًا لأن النوع يتم تحديده تلقائيًا بواسطة نظام الإنشاء (المنطقي ، INTs ، العوامات والسلاسل) ، تساءلت عما إذا كان هناك أي طريقة لإجبار نوع البيانات على السلسلة.

حاولت إضافة مساحة في النهاية ("5555555555") ، ولكن يتم تفسير القيمة بعد ذلك على أنها 5.5555553E9! ).

حاولت أيضًا استخدام GetString بدلاً من الحصول ، ولكن يتم إعادة NULL.

أيه أفكار؟ تيا.

هل كانت مفيدة؟

المحلول

يبدو أن وضع مساحة نار أمام الرقم يعمل:

<meta-data android:name="foo" android:value="\ 1234567890"/>

لا تظهر المساحة التي هربت في القيمة التي تم إرجاعها بواسطة get().

ليس لدي أي فكرة تمامًا عن كيفية عمل هذا ، إذا كنت صادقًا.

إن أردت شيء موثق وبالتالي أكثر موثوقية ، يمكنك دائمًا وضع قيمة السلسلة الخاصة بك كمورد وإشارة إليها:

<meta-data android:name="foo" android:resource="@string/mynumber"/>

نصائح أخرى

لدي مثل هذه المشكلة. الحل الخاص بي على النحو التالي:

<meta-data android:value="5555555555\0" android:name="foo"></meta-data>

أضفت في نهاية متغير - تسلسل eskape " 0" (NULL - غالبًا ما يتم استخدامه لتحديد نهاية سلسلة الأحرف (على سبيل المثال ، باللغة C).

هذا العمل بالنسبة لي.

مع أطيب التحيات.

بدلاً من المساحة ، حاول استخدام جزء من علامات الترقيم التي لا ينبغي أن يكون لها دور في قيمة رقمية ، مثل القولون ، ومعرفة ما إذا كان ذلك يساعد.

لقد صادفت هذه المشكلة مؤخرًا ، ومن المحبط للغاية أن يتم تفسير شيء مثل معرف تطبيق Facebook على أنه عدد صحيح يؤدي إلى مشاكل بسبب الفائض (بالطبع). كنت أفكر/آمل أن يكون من الممكن تجاوز الكتابة الضمنية. على سبيل المثال ، بدلاً من:

<meta-data android:name="value" android:value="12345678901234567890" />

سيكون من الرائع أن نكتب:

<meta-data android:name="value" android:type="string" android:value="12345678901234567890" />

من أجل التعويض عن ذلك ، كتبت بعض الكود الداعم الذي يستوجب سمات واضح لتبدو على النحو التالي:

<meta-data android:name="value1" android:value="string/12345678901234567890" />
<meta-data android:name="value2" android:value="integer/12345" />
<meta-data android:name="value3" android:value="boolean/true" />
<meta-data android:name="value4" android:value="float/1.34" />
<meta-data android:name="value5" android:value="float/6" />

لاحظ أن هذا يهدف إلى أن يبدو مشابهًا لنظام Android @string/@integer بناء الجملة باستثناء أنني قد أسقطت @, ، وتفسير هذا على أنه إسقاط مستوى عدم التوجيه.

بالإضافة إلى حل المشكلة الأصلية لـ [0-9]+ التي تم تفسيرها دائمًا على أنها أعداد صحيحة ، فإنها تتيح أيضًا تحديد العوامات مباشرة على الرغم من أن هناك عددًا صحيحًا.

ميزة أخرى من هذا هو أنه من الممكن تمديد مجموعة الأنواع بشكل تعسفي. على سبيل المثال

<meta-data android:name="myfrac" android:value="fraction/3/7" />
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top