【问题标题】:Android: App crashes on calling toast from another class [duplicate]Android:应用程序在从另一个类调用 toast 时崩溃 [重复]
【发布时间】:2020-05-14 15:31:32
【问题描述】:

我是一名新手 Android 开发人员。 我创建了一个 package-private 类,它扩展了 Application,并包含特定功能所需的代码。我基本上想通过吐司来显示用户选择的按钮是否是正确的选择。由于我必须为许多活动调用此代码,因此我只是为它创建了一个包私有类。但是,单击按钮时,应用程序崩溃。请参阅下面给出的代码以供参考。

我无法将 onClick 方法更改为非静态,因为如果这样做,Android Studio 会显示错误,如果我将其更改为静态,我将无法使用方法 getApplicationContext(),因为它是在静态块中无法访问。

我认为使用view.getContext() 会导致崩溃。

是否有任何解决方法或解决方案? 您的帮助将不胜感激。谢谢:)

这是供您参考的代码。

activity.java:

public class activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Button btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(functions.select);
        functions.makeLayout(expression, buttons);
    }
}

这是导致应用程序崩溃的代码。

functions.java:

class functions extends Application {

    private static int idx;

    public static View.OnClickListener select=new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            int selected_index=(int) view.getTag();
            if(selected_index==idx)
            {
                Toast.makeText(view.getContext(), "Correct.", Toast.LENGTH_LONG).show();
                ((Button) view).setTextColor(Color.GREEN);
            }
            else
            {
                Toast.makeText(view.getContext(), "Wrong.", Toast.LENGTH_LONG).show();
                ((Button) view).setTextColor(Color.RED);
            }
        }
    };

【问题讨论】:

  • 这将帮助您解决崩溃问题:Unfortunately MyApp has stopped. How can I solve this?
  • @peprumo 先生,堆栈跟踪(在本例中为 logcat)没有给出任何异常,甚至没有给出行号。它只给出一个错误:20:36:48.948 21734-21762/com.ex.myproj E/Perf: getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array
  • 天哪:D 你在做什么。如果你在写东西之前阅读一些关于 Java 语言和 android SDK 的东西会更好。应用程序类不是这样的地方。你想达到什么目标?
  • @EugeneTroyanskii 我写了一个函数来减少冗余代码。有没有其他方法可以检索上下文?这似乎很混乱。我想在按钮上显示吐司 点击查看用户选择是否正确。
  • @Sanskar 作为上下文。您可以在 onClick 方法 view.getContext() 中获取内部参数的视图。 Application 类通常用于某些必须用于正确工作的操作,例如数据库的初始化等...删除您的类函数。为了您的目的,创建类 CustomOnClick 实现 View.OnClickListener() 并使您的 Toask 在实现中。但在实际情况下,通常您必须在此按钮存在的活动/片段中准确地实现 onClick,并对用户操作做出特定反应。

标签: java android static android-context


【解决方案1】:

好的,我发现导致崩溃的不是view.getContext(),而是int selected_index=(int) view.getTag(); 行。我先把它变成一个字符串,然后用下面的代码来解决它:

String selected_index=view.getTag.toString();
int sidx=Integer.parseInt(selected_index);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    相关资源
    最近更新 更多