String android.content.Context.getString(int resId, Object... formatArgs)

本文介绍Android中如何使用getString方法格式化字符串资源,通过实例展示了如何利用占位符实现动态内容插入,适用于需要本地化的应用界面提示信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 String subtitle=getString(R.string.subtitle_format, crimeCount);
        /**
         * String tiptext = getString(R.string.format_error,"用户名","昵称","密码");
         * <string name="format_error">请使用%1$s:%2$s:%3$s的格式</string>
         * 返回结果: tiptext ="请使用用户名:昵称:密码的格式";
         *
         * String tiptext =getString(R.string.photo_select_complete, 3,10));
         * <string name="photo_select_complete">完成(%1$d/%2$d)</string>
         * 返回结果: tiptext ="完成(3/10)";
         * 注意:%d 对应整数 %s对应字符串
         */


官方文档地址:http://developer.android.com/reference/android/content/Context.html#getString%28int,%20java.lang.Object...%29
使用方法如下:

private void updateSubtitle() {
        CrimeLab crimeLab=CrimeLab.get(getActivity());
        int crimeCount=crimeLab.getCrimes().size();
        //getString 接受字符串资源中占位符的替换值   将后面的值替换字符串资源中的占位符
        String subtitle=getString(R.string.subtitle_format, crimeCount);
        /**
         * String tiptext = getString(R.string.format_error,"用户名","昵称","密码");
         * <string name="format_error">请使用%1$s:%2$s:%3$s的格式</string>
         * 返回结果: tiptext ="请使用用户名:昵称:密码的格式";
         *
         * String tiptext =getString(R.string.photo_select_complete, 3,10));
         * <string name="photo_select_complete">完成(%1$d/%2$d)</string>
         * 返回结果: tiptext ="完成(3/10)";
         * 注意:%d 对应整数 %s对应字符串
         */
        AppCompatActivity activity=(AppCompatActivity) getActivity();
        activity.getSupportActionBar().setSubtitle(subtitle);
    }
应该能看懂了哈。。。

%1$s就是占位符,从1开始匹配,可以有%2$s,%3$s,用后面的字符来替换占位符相应的位置。




/* 文件路径: MyAppFunction.java */ package com.example.kucun2.function; import android.app.Application; import android.content.Context; import android.os.Bundle; import android.util.Log; import androidx.annotation.StringRes; import com.example.kucun2.DataPreserver.Data; import com.example.kucun2.MainActivity; import java.lang.reflect.Field; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.X509TrustManager; import okhttp3.OkHttpClient; public class MyAppFunction extends Application { private static MyAppFunction instance; private String TAG ="MyAppFnction"; public static OkHttpClient getClient() { return client; } private static OkHttpClient client; public static String getApiUrl(String s) { return getStringResource("string","url")+getStringResource("string",s); } @Override public void onCreate() { super.onCreate(); instance = this; createSecureClient(this.getApplicationContext()); registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { private int activityCount = 0; @Override public void onActivityCreated(android.app.Activity activity, Bundle savedInstanceState) {} @Override public void onActivityStarted(android.app.Activity activity) { activityCount++; } @Override public void onActivityResumed(android.app.Activity activity) {} @Override public void onActivityPaused(android.app.Activity activity) {} @Override public void onActivityStopped(android.app.Activity activity) { activityCount--; // 当所有Activity都停止时(应用进入后台) if (activityCount == 0) { saveData(); } } @Override public void onActivitySaveInstanceState(android.app.Activity activity, Bundle outState) {} @Override public void onActivityDestroyed(android.app.Activity activity) { // Activity销毁时保存数据 if (activity instanceof MainActivity && activity.isFinishing()) { saveData(); } } }); } private void saveData() { try { Log.d(TAG, "Saving application data..."); Data.saveAllData(this); } catch (Exception e) { Log.e(TAG, "Failed to save application data", e); } } public static String getStringResource(@StringRes int resId) { return instance.getString(resId); } public static String getStringResource(@StringRes int resId, Object... args) { return instance.getString(resId, args); } public static String getStringResource(String resourceType, String resourceName) { try { // 1. 构造完整的资源路径 String className = instance.getPackageName() + ".R$" + resourceType; // 2. 反射获取资源ID Class<?> resClass = Class.forName(className); Field field = resClass.getField(resourceName); int resId = field.getInt(null); // 静态字段获取资源ID // 3. 获取实际字符串资源 return instance.getResources().getString(resId); } catch (Exception e) { handleError(e); return null; // 或返回默认值 } } private static void handleError(Exception e) { // 异常处理逻辑 if (e instanceof ClassNotFoundException) { System.err.println("R类未找到: " + e.getMessage()); } else if (e instanceof NoSuchFieldException) { System.err.println("资源字段不存在: " + e.getMessage()); } else { e.printStackTrace(); } } public static void createSecureClient(Context context) { // 创建安全的SSL上下文 SSLContext sslContext = TLSUtils.createSSLContext(context, "selfsigned.crt"); SSLSocketFactory socketFactory = sslContext.getSocketFactory(); X509TrustManager trustManager = TLSUtils.createTrustManager(context, "selfsigned.crt"); client = new OkHttpClient.Builder() .sslSocketFactory(socketFactory, trustManager) .hostnameVerifier((hostname, session) -> { // 开发环境直接返回true,生产环境应验证域名 return true; }) .build(); } } ================================================================================ /* 文件路径: TLSUtils.java */ package com.example.kucun2.function; import android.content.Context; import android.util.Log; import java.io.IOException; import java.io.InputStream; import java.security.KeyManagementException; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.cert.Certificate; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.util.Arrays; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManagerFactory; import javax.net.ssl.X509TrustManager; public class TLSUtils { private static final String TAG = "TLSUtils"; /** * 创建信任自签名证书的SSL上下文 */ public static SSLContext createSSLContext(Context context, String fileName) { try { X509TrustManager trustManager = createTrustManager(context, fileName); return createSSLContext(trustManager); } catch (Exception e) { Log.e(TAG, "创建SSL上下文失败", e); return null; } } /** * 使用信任管理器创建SSL上下文 */ public static SSLContext createSSLContext(X509TrustManager trustManager) throws NoSuchAlgorithmException, KeyManagementException { SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, new TrustManager[]{trustManager}, null); return sslContext; } /** * 创建信任管理器 */ public static X509TrustManager createTrustManager(Context context, String fileName) { try { // 加载证书 Certificate certificate = loadCertificate(context, fileName); // 创建包含证书的KeyStore KeyStore keyStore = createKeyStoreWithCertificate(certificate); // 初始化信任管理器工厂 TrustManagerFactory tmf = TrustManagerFactory.getInstance( TrustManagerFactory.getDefaultAlgorithm()); tmf.init(keyStore); // 查找X509TrustManager for (TrustManager tm : tmf.getTrustManagers()) { if (tm instanceof X509TrustManager) { return (X509TrustManager) tm; } } throw new RuntimeException("未找到X509TrustManager"); } catch (Exception e) { Log.e(TAG, "创建信任管理器失败", e); return getSystemDefaultTrustManager(); // 回退到系统默认 } } /** * 获取系统默认信任管理器 */ private static X509TrustManager getSystemDefaultTrustManager() { try { TrustManagerFactory tmf = TrustManagerFactory.getInstance( TrustManagerFactory.getDefaultAlgorithm()); tmf.init((KeyStore) null); // 初始化系统默认信任库 for (TrustManager tm : tmf.getTrustManagers()) { if (tm instanceof X509TrustManager) { return (X509TrustManager) tm; } } } catch (Exception e) { Log.e(TAG, "获取系统默认信任管理器失败", e); } return null; } /** * 从assets加载证书 */ private static Certificate loadCertificate(Context context, String fileName) throws CertificateException, IOException { try (InputStream is = context.getAssets().open(fileName)) { CertificateFactory cf = CertificateFactory.getInstance("X.509"); return cf.generateCertificate(is); } } /** * 创建包含证书的KeyStore */ private static KeyStore createKeyStoreWithCertificate(Certificate certificate) throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException { KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); keyStore.load(null, null); // 创建空KeyStore keyStore.setCertificateEntry("selfsigned", certificate); return keyStore; } }简化两个类,
06-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值