java - 如何访问膨胀布局内的 TextView 的值

标签 java android nullpointerexception invocationtargetexception

我需要能够访问 TextView “配额”中的 double ,以便用它进行一些数学运算。问题是我在应该获取值的行上遇到错误。我不确定,这可能是因为 TextView 位于膨胀的布局内。

我尝试使用适配器中设置的名称,我认为这可能是访问它的方法,但没有成功。

在主类中找到textview,命名为quota

quota = findViewById(R.id.textView_dailyData_BricksQuota);

在适配器类中找到textview,将其命名为dataBricksQuota,尝试在主类中调用它,但不起作用

TextView dataBricksQuota = view.findViewById(R.id.textView_dailyData_BricksQuota); 

dataBricksQuota.setText(String.valueOf(project.getBricksQuota()));

问题出现在 if 语句的第一行,我尝试在主类中获取 textview 的值

if (projectDay >= 2) {

    String currentBrickQuota = quota.getText().toString();

    double currentBrickQuotaDouble = Double.parseDouble(currentBrickQuota);

    double averageBrickRunningQuota = ((2 * currentBrickQuotaDouble + averageBricksNDatabase) / projectDay);
    String sql = "UPDATE activeProjectsTable SET averageBricks = ? WHERE ProjectId = (SELECT MAX(ProjectId) FROM activeProjectsTable)";
    AusWideDatabase.execSQL(sql, new Double[] {
        averageBrickRunningQuota
    });
}

我本以为它会简单地获取 textview 的值,以便可以在方程中使用它,但是当我运行 if 语句时,出现错误。

错误

Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invoke(Native Method)
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
    at android.view.View.performClick(View.java:7333) 
    at android.widget.TextView.performClick(TextView.java:14160) 
    at android.view.View.performClickInternal(View.java:7299) 
    at android.view.View.access$3200(View.java:846) 
    at android.view.View$PerformClick.run(View.java:27774) 
    at android.os.Handler.handleCallback(Handler.java:873) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:214) 
    at android.app.ActivityThread.main(ActivityThread.java:6981) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445) 
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.widget.TextView.getText()' on a null object reference
    at com.auswide.auswideapp.dailyData.LoadEodChecklist(dailyData.java:145)
    at java.lang.reflect.Method.invoke(Native Method) 
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385) 
    at android.view.View.performClick(View.java:7333) 
    at android.widget.TextView.performClick(TextView.java:14160) 
    at android.view.View.performClickInternal(View.java:7299) 
    at android.view.View.access$3200(View.java:846) 
    at android.view.View$PerformClick.run(View.java:27774) 
    at android.os.Handler.handleCallback(Handler.java:873) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:214) 
    at android.app.ActivityThread.main(ActivityThread.java:6981) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)

最佳答案

如果您传递主类的上下文,您可以这样做。代码如下

TextView textView = ((Activity)context).findViewById(R.id.yourTextView); // -> context must be context of your main class
textView.setText("Hello world"); // -> textView variable is not null, so it will assign text to textView

另一种方法是膨胀整个布局,但我发现它在这种情况下没有用。

关于java - 如何访问膨胀布局内的 TextView 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56140802/

相关文章:

java - 在 Java 中以 2、3、4 等为基数计数并输出所有排列

java - 混合来自 SWT 和 Swing 的框架 (JFrame)

android - 如何显示在Android中从相机最后捕获的图​​像?

java - Sonar : Possible nullpointer?

java - 使用自定义 View 数组的 NullPointerException

java - 通过 JSCh 将密码传递给 shell 脚本

java - Selenium java 中的 Click() 看起来有 "clicked"但没有任何反应。在IE浏览器中

android - Android Studio 中的 lint 如何与 IntelliJ 检查集成?

android - 按下主页按钮时如何清除 Activity 历史堆栈?

java - 使用 @Autowired 进行 Spring 对象注入(inject)时抛出 NullPointerException