我的代码是
private static Toast systemToast;
public static Toast getSystemToast(Object resId) {
if (null == systemToast) {
// Apps is the Application.java
systemToast = Toast.makeText(Apps.getAppContext(), R.string.me_empty,
Toast.LENGTH_SHORT);
}
String res = String.valueOf(resId);
if (resId.getClass() == Integer.class) {
systemToast.setText(Integer.valueOf(res));
} else if (resId.getClass() == String.class) {
systemToast.setText(res);
}
systemToast.setDuration(Toast.LENGTH_SHORT);
return systemToast;
}
/ ** Apps.java ** /
public class Apps extends Application {
private static Apps sContext;
@Override
protected void attachBaseContext(Context base) {
sContext = this;
}
public static Apps getAppContext() {
return sContext;
}
在某些Android设备中,出现错误,错误日志为:
android.content.res.Resources$NotFoundException: File res/layout
/transient_notification.xml from xml type layout resource ID #0x10900ef at
android.content.res.Resources.loadXmlResourceParser(Resources.java:2720) at
android.content.res.Resources.loadXmlResourceParser(Resources.java:2675) at
android.content.res.Resources.getLayout(Resources.java:1096) at
android.view.LayoutInflater.inflate(LayoutInflater.java:422) at
android.view.LayoutInflater.inflate(LayoutInflater.java:368) at
android.widget.Toast.makeText(Toast.java:282)
答案 0 :(得分:1)
当传递上下文对象未正确初始化或可能是其引用为null时,可能会发生此错误。
1.如果您使用的是Fragment,则可以在onAttach方法中找到Context。并传递 getSystemToast 方法。
**@Override
public void onAttach(Context context) {
super.onAttach(context);
}**
2。如果您正在使用Activity,那么使用 getBaseContext()方法或 ActivityName.this 获取上下文两者都将返回您的上下文
您无需为get Context定义函数。 Android为获取上下文提供了以下方法。 1. getApplicationContext()应用程序上下文与Applicaition关联,并且在整个生命周期中始终相同。
2.getBaseContext()
3.onAttach()in Fragment。