java شرح - بديل لـ String.join في Android؟




download studio (4)

يمكنك استخدام TextUtils.join بدلاً من ذلك:

String result = TextUtils.join(", ", list);

(تمت إضافة String.join في Java 8 ، ولهذا السبب لا يمكنك استخدامه في Android.)

أريد أن تسلسل قائمة ArrayList بفواصل كفاصل. لقد وجدت هذه الإجابة ، قائلة إنه من الممكن استخدام String.join في Java.

عندما أحاول استخدام هذا ، يعطي Android Studio الخطأ التالي:

لا يمكن حل الطريقة 'join (java.lang.String ، java.lang.String ، java.lang.String ، java.lang.String)'

هل هناك بديل جيد وموجز لـ Android Studio (بدلاً من استخدام حلقة for)؟


يمكنك استخدام هذا

TextUtils.join(", ", your_list);

String[] List ={"<html>","<body>","<title>"};
String abc;       
abc =TextUtils.join("\n", List);
textmsg.getText().insert(textmsg.getSelectionStart(), abc);

نتيجة:

<html>
<body>
<title>

تحديث : اعتبارًا من الإصدارات الحديثة لنظام التشغيل Android ، تم حل العديد من المشكلات المتعلقة بـ ANDROID_ID ، وأعتقد أن هذا النهج لم يعد ضروريًا. يرجى إلقاء نظرة على إجابة أنتوني .

الإفصاح الكامل: استخدم تطبيقي النهج التالي في الأصل ولكنه لم يعد يستخدم هذا النهج ، ونستخدم الآن النهج الموضح في إدخال android-developers.blogspot.com/2011/03/… التي ترتبط بها إجابة emmby (وهي إنشاء UUID#randomUUID() .

هناك العديد من الإجابات على هذا السؤال ، ومعظمها سيعمل فقط "بعض" الوقت ، وللأسف هذا ليس جيدًا بما فيه الكفاية.

بناءً على اختباراتي للأجهزة (جميع الهواتف ، واحد منها على الأقل غير نشط):

  1. عرض جميع الأجهزة التي تم اختبارها قيمة لـ TelephonyManager.getDeviceId()
  2. جميع أجهزة GSM (جميعها تم اختبارها باستخدام بطاقة SIM) تقوم بإرجاع قيمة TelephonyManager.getSimSerialNumber()
  3. إرجاع كافة الأجهزة CDMA فارغة لـ getSimSerialNumber() (كما هو متوقع)
  4. عرضت جميع الأجهزة التي تتضمن حساب Google تمت إضافتها إلى ANDROID_ID
  5. عرضت جميع أجهزة CDMA نفس القيمة (أو اشتقاق القيمة نفسها) لكل من ANDROID_ID و TelephonyManager.getDeviceId() - طالما تمت إضافة حساب Google أثناء الإعداد.
  6. لم تتح لي بعد فرصة اختبار أجهزة GSM بدون بطاقة SIM أو جهاز GSM مع عدم إضافة حساب Google أو أي من الأجهزة في وضع الطائرة.

لذلك إذا كنت تريد شيئًا فريدًا للجهاز نفسه ، يجب أن يكون TM.getDeviceId() كافياً. من الواضح أن بعض المستخدمين أكثر جنونًا من الآخرين ، لذا قد يكون من المفيد تجزئة 1 أو أكثر من هذه المعرّفات ، بحيث لا تزال السلسلة فريدة من نوعها فعليًا للجهاز ، ولكنها لا تحدد الجهاز الفعلي للمستخدم صراحةً. على سبيل المثال ، باستخدام String.hashCode() ، جنبا إلى جنب مع UUID:

final TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);

final String tmDevice, tmSerial, androidId;
tmDevice = "" + tm.getDeviceId();
tmSerial = "" + tm.getSimSerialNumber();
androidId = "" + android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);

UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hashCode());
String deviceId = deviceUuid.toString();

قد يؤدي إلى شيء من هذا القبيل: 00000000-54b3-e7c7-0000-000046bffd97

وهو يعمل جيدا بما فيه الكفاية بالنسبة لي.

كما ذكر ريتشارد أدناه ، لا تنس أنك بحاجة إلى إذن لقراءة خصائص TelephonyManager ، لذلك أضف هذا إلى بيانك:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

استيراد libs

import android.content.Context;
import android.telephony.TelephonyManager;
import android.view.View;




java android