Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 显示非活动类的祝酒词。设置吐司上下文的问题_Java_Android_Android Toast - Fatal编程技术网

Java 显示非活动类的祝酒词。设置吐司上下文的问题

Java 显示非活动类的祝酒词。设置吐司上下文的问题,java,android,android-toast,Java,Android,Android Toast,剧透者:这篇文章可能包含一些愚蠢的东西,因为它习惯于C语言,而对Java编程来说是新手 有一个activity MainActivity和一个包含许多方法的公共非活动类。我需要为他们中的一些人展示祝酒词 当前的尝试与此类似,在getApplicationContext()的“无法从静态上下文引用非静态方法”中失败: 那么,如何从一个非活动类中调用祝酒词呢 UPD:将从类中的方法调用errorWarn。因此,如果类的某个方法发生错误,则应该发出警报 我们在main活动中有一个editText字段。

剧透者:这篇文章可能包含一些愚蠢的东西,因为它习惯于C语言,而对Java编程来说是新手

有一个activity MainActivity和一个包含许多方法的公共非活动类。我需要为他们中的一些人展示祝酒词

当前的尝试与此类似,在getApplicationContext()的“无法从静态上下文引用非静态方法”中失败:

那么,如何从一个非活动类中调用祝酒词呢

UPD:将从类中的方法调用errorWarn。因此,如果类的某个方法发生错误,则应该发出警报

我们在main活动中有一个editText字段。类应该从中获取并解析字符串。如果在某些步骤上处理失败,则在MainActivity中显示toast

UPD2:完整结构

主要活动:

public class MainActivity extends ActionBarActivity {
    <...>
    public void ButtonClick (View view) {
        Class.testfunc("");
    }
}
传递上下文参数

 void errorWarn (Context context,String warning) {
        Toast.makeText(context, "Something's in wrong " + warning, Toast.LENGTH_SHORT).show();
    }

定义方法,使其在参数中接受
上下文
,并将
活动
传递给它

在你的另一节课上

或者,如果您想在构造函数中获取上下文并仅在
您的其他类中使用
showtoos

public class YourOtherClass {

    private Context context;

    public YourOtherClass(Context context){
        this.context = context;
    }

    private void showToast(String message){
        Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
    }
}
主要活动

或者,如果您有
YourOtherClass
Context
成员变量,并且希望在
YourOtherClass
的构造函数中传递
Context
,您可以这样做

new YourOtherClass(this).showToast(message);
// showToast doesn't have to take a Context as argument, it could just take one as constructor parameter and hold that. 
// But then you have to make sure YourOtherClass is not used anymore if the Activity is closed.
对于您提供的代码中的错误:

Context context = com.example.ex3.MainActivity;
这会失败,因为您正在尝试将类型分配给实例

MainActivity.errorWarn("here");
这会失败,因为您正在调用一个非静态方法(该方法的签名中没有静态修饰符),就好像它是一个静态方法一样。查看静态与非静态方法的更多详细信息


如果不知道
YourOtherClass
做什么,或者它的生命周期与活动的生命周期是如何关联的,很难说,但是必须从一个与UI无关的类中触摸UI,并且没有任何对您可以使用的
上下文的引用,这感觉很奇怪。将
上下文
作为
YourOtherClass
构造函数的参数可能是您所需要的,但是要小心泄漏
上下文
活动
生命周期。

如果必须:
静态无效错误警告(上下文上下文,字符串警告){…}
当您需要显示toast时,您始终可以有一个适当的上下文问题是showToast要从类中调用,但我收到类似“非静态x不能从静态上下文引用”这样的消息。是否有方法将类声明为非静态,以便从类中调用非静态方法没有问题?看起来它能解决所有问题我编辑了我的答案,希望它更接近你想要的。然而,我鼓励您思考最后一段:也许有一个简单的解决方法(在构造函数中传递上下文并在showToast中使用它)?更一般地说,您遇到的这些错误与Java有关,而不是与Android相关,因此我建议您阅读纯Java(特别是为Java SE认证做准备的书籍,这些书籍重点关注语言技术,有效的Java是使用有限资源时必须阅读的),它将使您成为更好的Android程序员;)我想要实现的是UPD2。最后,我意识到Java类比c中的.c-.h拆分要聪明得多。例如,需要创建一个类实例来使用非静态方法,而不是仅仅使用它们,这在目前看来似乎很奇怪。也有类似JNI的东西,但它看起来不是一个好的解决方案。是时候更深入地学习一些基础知识了:)
new YourOtherClass().showToast(this, message);
new YourOtherClass(this).showToast(message);
// showToast doesn't have to take a Context as argument, it could just take one as constructor parameter and hold that. 
// But then you have to make sure YourOtherClass is not used anymore if the Activity is closed.
Context context = com.example.ex3.MainActivity;
MainActivity.errorWarn("here");