[英]Can"t acess to strings.xml resources in a class
我正在尝试访问res / stringsxml中的字符串值:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="fr">
<string name="app_name">Solutis</string>
</resources>
在这里,我尝试拨打电话:package fr.package;
公共类SOAP扩展了应用程序{
String NAMESPACE;
String URL;
String SOAP_ACTION;
@Override
public void onCreate() {
super.onCreate();
NAMESPACE = getResources().getString(R.string.NAMESPACE);
URL = getResources().getString(R.string.URL);
SOAP_ACTION = getResources().getString(R.string.SOAP_ACTION);
}
private static String TAG = SOAP.class.getSimpleName();
public Reponse envoieDemande(String method, String xml) {
}
}
错误:
08-18 04:21:18.839 27859-27874 /? E / AndroidRuntime致命异常:IntentService [EnvoieService]进程:fr.package,PID:27859 java.lang.NullPointerException在android.content.ContextWrapper.getResources(ContextWrapper.java:89)在fr.package.SOAP。(SOAP。 java:37)at fr.package.notifications.EnvoieService.onHandleIntent(EnvoieService.java:96)at android.app.IntentService $ ServiceHandler.handleMessage(IntentService.java:65)at android.os.Handler.dispatchMessage(Handler.java) :102),位于android.os.Looper.loop(Looper.java:136),位于android.os.HandlerThread.run(HandlerThread.java:61)
我如何称呼SOAP类:
private class AsyncSoapCall extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
SOAP soap = new SOAP();
//soap.envoieDemande("SendLead", xml);
Reponse ret = soap.envoieDemande("SendLead", xml);
System.out.println(ret.getCode() + ret.getMessage() + ret.getOption());
if (ret.getCode().equals("1")) {
GoogleAnalytics ga= new GoogleAnalytics(getActivity());
ga.envoieTracker(idApplication, demandeId, logement, typeForm);
}
return null;
}
编辑:在onCreate()中初始化
public class SOAP extends Application {
String NAMESPACE;
String URL;
String SOAP_ACTION;
@Override
public void onCreate() {
NAMESPACE = getResources().getString(R.string.NAMESPACE);
URL = getResources().getString(R.string.URL);
SOAP_ACTION = getResources().getString(R.string.SOAP_ACTION);
}
}
没用
您不能从资源初始化字段; 该字段需要在初始化类时进行初始化,而这需要在运行时绑定应用程序资源之前进行。 (顺便说一句,您不能使用Resources.getSystem()的原因是,以这种方式获得的Resources对象仅包含系统资源,而不包含任何应用程序资源。)
查看此答案如何在onCreate()之前在静态String上使用getString()?
获取AppController实例:
String NAMESPACE;
String URL;
String SOAP_ACTION;
private static SOAP mInstance;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
NAMESPACE = getResources().getString(R.string.NAMESPACE);
URL = getResources().getString(R.string.URL);
SOAP_ACTION = getResources().getString(R.string.SOAP_ACTION);
}
public static synchronized SOAP getInstance() {
return mInstance;
}
在您的AppController类(扩展Application类的AppController类中添加此字段和函数。在您的情况下将是肥皂)
下次使用getInstance()方法获取Soap实例
private class AsyncSoapCall extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
SOAP soap = SOAP.getInstance();
//soap.envoieDemande("SendLead", xml);
Reponse ret = soap.envoieDemande("SendLead", xml);
System.out.println(ret.getCode() + ret.getMessage() + ret.getOption());
if (ret.getCode().equals("1")) {
GoogleAnalytics ga= new GoogleAnalytics(getActivity());
ga.envoieTracker(idApplication, demandeId, logement, typeForm);
}
return null;
}
从下面使用任一
context.getString(R.string.resource_name)
要么
application.getString(R.string.resource_name)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.