getString(int resId, Object... formatArgs)的用法

本文详细介绍了 Android 中 Context 类的 getString 方法的用法,通过两个示例展示了如何使用该方法来获取资源文件中的字符串,并进行格式化处理。第一个示例使用了 %s 来代表字符串参数,第二个示例则使用了 %d 来代表整数参数。

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

public final String getString (int resId,Object... formatArgs)
Return a localized formatted string from the application's package's default string table, substituting the format arguments as defined inFormatter andformat(String, Object...).
官方文档地址:http://developer.android.com/reference/android/content/Context.html#getString%28int,%20java.lang.Object...%29

使用示例:

1. %s对应字符串
String tiptext =getString(R.string.format_error,"用户名","昵称","密码");

strings.xml 中 format_error 为:

<string name="format_error">请使用%1$s:%2$s:%3$s的格式</string>

返回结果: tiptext ="请使用用户名:昵称:密码的格式";


2.%d 对应整数
String tiptext =getString(R.string.photo_select_complete, 3,10));

strings.xml 中 photo_select_complete 为:

<string name="photo_select_complete">完成(%1$d/%2$d)</string>

返回结果: tiptext ="完成(3/10)";

注意:%d 对应整数 %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、付费专栏及课程。

余额充值