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