Android 执行期间未找到文本视图
Android text view not found during execution time
我有一个必须在执行时更新的文本视图。此文本视图由以下 xml 定义:
<TextView
android:id="@+id/agi_val"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
在 activity 代码中,我像这样访问这个(和其他 TextView):
private TextView AGI;
///< Some stuff
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_abf__char_gen__basic_info);
abfToolsSaveData = (ABFToolsSaveData) getIntent().getParcelableExtra("SaveDataClass");
this.AGI = (TextView) findViewById(R.id.agi_val);
///< Some stuff
if (abfToolsSaveData != null) {
this.chargeData(true);
} else {
Log.d("INFO", "abfToolsSaveData is null");
}
}
然后,在 chargeData(boolean):
public void chargeData(boolean firstTime){
if(firstTime){
MainCharacteristics mc = abfToolsSaveData.getCharacter().getMainCharacteristics(); ///< We get the main characteristics, auto-generated the first time
/**
* Set the Text Views with the default value
*/
if(AGI != null){ ///< I've done this to check if the text view is null or not
Log.d("INFO", String.valueOf(AGI));
AGI.setText(mc.getAGI());
}
else
Log.d("INFO","AGI IS NULL");
///< Some stuff
}
}
问题是正在找到 "agi_val" 文本视图,但是我之前保存的 activity 的 AGI 文本视图无法访问资源 "agi_val"谁的链接。错误日志如下:
///< This first line shows the value of the "agi_val" ID. As you can see, it's not null.
09-20 10:07:32.344 1266-1266/com.noeselmastersonlosdados.sliferdragon.penandpapercompanion D/INFO: android.support.v7.widget.AppCompatTextView{b670993 V.ED.... ......ID 0,0-0,0 #7f0d0077 app:id/agi_val}
09-20 10:07:32.344 1266-1266/com.noeselmastersonlosdados.sliferdragon.penandpapercompanion W/ResourceType: No package identifier when getting value for resource number 0x00000009
--------- beginning of crash
09-20 10:07:32.347 1266-1266/com.noeselmastersonlosdados.sliferdragon.penandpapercompanion E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.noeselmastersonlosdados.sliferdragon.penandpapercompanion, PID: 1266
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.noeselmastersonlosdados.sliferdragon.penandpapercompanion/com.noeselmastersonlosdados.sliferdragon.penandpapercompanion.ABF_CharGen_BasicInfo}: android.content.res.Resources$NotFoundException: String resource ID #0x9
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access0(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x9
at android.content.res.Resources.getText(Resources.java:299)
at android.widget.TextView.setText(TextView.java:4132)
///< This line is the assigment of the text
at com.noeselmastersonlosdados.sliferdragon.penandpapercompanion.ABF_CharGen_BasicInfo.chargeData(ABF_CharGen_BasicInfo.java:73)
at com.noeselmastersonlosdados.sliferdragon.penandpapercompanion.ABF_CharGen_BasicInfo.onCreate(ABF_CharGen_BasicInfo.java:54)
at android.app.Activity.performCreate(Activity.java:5990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access0(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
有人知道到底发生了什么吗?我已经花了两天时间试图解决这个问题,但我不知道如何解决(我在互联网上搜索过,但我找不到类似的东西)。
如果有人要 R class ID,它与日志中第一行显示的相同。
调用 setContentView() 后,如果您在正确的布局中查找并且视图存在于该布局中,您将永远不会得到空视图。
如果您通过传递错误的 ID 查找视图,您只会得到一个空值
使用这个 if (!AGI.getText().toString.matches(""))
或这个
if(!TextUtils.isEmpty(AGI.getText().toString))
代替 if(AGI != null)
我认为您不需要使用 this
来引用在 XML 中查找 TextView
小部件 ID。
所以,只需这样做:
TextView AGI = (TextView) findViewById(R.id.agi_val);
您也可以通过 isEmpty() 函数检查该值是否为空。您必须检查 abfToolsSaveData
而不是 AGI
的空值。还要检查 abfToolsSaveData
的类型。如果它 integer
或 double
,那么你必须将 integer/double
值解析为 string
.
if(!abfToolsSaveData.isEmpty()){
AGI.setText("Some Text");
//AGI.setText(String.valueOf("some integer content"));
}else {
}
嗯,我在 "Stack Overflow en Español" 中问过同样的答案,我得到了答案。
问题是 mc.getAGI()
返回一个 int,因此使用 setText(int resourceId)
的覆盖,找到具有 id
值的资源 R.string
.
我有一个必须在执行时更新的文本视图。此文本视图由以下 xml 定义:
<TextView
android:id="@+id/agi_val"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
在 activity 代码中,我像这样访问这个(和其他 TextView):
private TextView AGI;
///< Some stuff
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_abf__char_gen__basic_info);
abfToolsSaveData = (ABFToolsSaveData) getIntent().getParcelableExtra("SaveDataClass");
this.AGI = (TextView) findViewById(R.id.agi_val);
///< Some stuff
if (abfToolsSaveData != null) {
this.chargeData(true);
} else {
Log.d("INFO", "abfToolsSaveData is null");
}
}
然后,在 chargeData(boolean):
public void chargeData(boolean firstTime){
if(firstTime){
MainCharacteristics mc = abfToolsSaveData.getCharacter().getMainCharacteristics(); ///< We get the main characteristics, auto-generated the first time
/**
* Set the Text Views with the default value
*/
if(AGI != null){ ///< I've done this to check if the text view is null or not
Log.d("INFO", String.valueOf(AGI));
AGI.setText(mc.getAGI());
}
else
Log.d("INFO","AGI IS NULL");
///< Some stuff
}
}
问题是正在找到 "agi_val" 文本视图,但是我之前保存的 activity 的 AGI 文本视图无法访问资源 "agi_val"谁的链接。错误日志如下:
///< This first line shows the value of the "agi_val" ID. As you can see, it's not null.
09-20 10:07:32.344 1266-1266/com.noeselmastersonlosdados.sliferdragon.penandpapercompanion D/INFO: android.support.v7.widget.AppCompatTextView{b670993 V.ED.... ......ID 0,0-0,0 #7f0d0077 app:id/agi_val}
09-20 10:07:32.344 1266-1266/com.noeselmastersonlosdados.sliferdragon.penandpapercompanion W/ResourceType: No package identifier when getting value for resource number 0x00000009
--------- beginning of crash
09-20 10:07:32.347 1266-1266/com.noeselmastersonlosdados.sliferdragon.penandpapercompanion E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.noeselmastersonlosdados.sliferdragon.penandpapercompanion, PID: 1266
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.noeselmastersonlosdados.sliferdragon.penandpapercompanion/com.noeselmastersonlosdados.sliferdragon.penandpapercompanion.ABF_CharGen_BasicInfo}: android.content.res.Resources$NotFoundException: String resource ID #0x9
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access0(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x9
at android.content.res.Resources.getText(Resources.java:299)
at android.widget.TextView.setText(TextView.java:4132)
///< This line is the assigment of the text
at com.noeselmastersonlosdados.sliferdragon.penandpapercompanion.ABF_CharGen_BasicInfo.chargeData(ABF_CharGen_BasicInfo.java:73)
at com.noeselmastersonlosdados.sliferdragon.penandpapercompanion.ABF_CharGen_BasicInfo.onCreate(ABF_CharGen_BasicInfo.java:54)
at android.app.Activity.performCreate(Activity.java:5990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access0(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
有人知道到底发生了什么吗?我已经花了两天时间试图解决这个问题,但我不知道如何解决(我在互联网上搜索过,但我找不到类似的东西)。
如果有人要 R class ID,它与日志中第一行显示的相同。
调用 setContentView() 后,如果您在正确的布局中查找并且视图存在于该布局中,您将永远不会得到空视图。
如果您通过传递错误的 ID 查找视图,您只会得到一个空值
使用这个 if (!AGI.getText().toString.matches(""))
或这个
if(!TextUtils.isEmpty(AGI.getText().toString))
代替 if(AGI != null)
我认为您不需要使用 this
来引用在 XML 中查找 TextView
小部件 ID。
所以,只需这样做:
TextView AGI = (TextView) findViewById(R.id.agi_val);
您也可以通过 isEmpty() 函数检查该值是否为空。您必须检查 abfToolsSaveData
而不是 AGI
的空值。还要检查 abfToolsSaveData
的类型。如果它 integer
或 double
,那么你必须将 integer/double
值解析为 string
.
if(!abfToolsSaveData.isEmpty()){
AGI.setText("Some Text");
//AGI.setText(String.valueOf("some integer content"));
}else {
}
嗯,我在 "Stack Overflow en Español" 中问过同样的答案,我得到了答案。
问题是 mc.getAGI()
返回一个 int,因此使用 setText(int resourceId)
的覆盖,找到具有 id
值的资源 R.string
.