首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在非活动类中使用活动方法?当我尝试使用上下文时,程序崩溃

如何在非活动类中使用活动方法?当我尝试使用上下文时,程序崩溃
EN

Stack Overflow用户
提问于 2019-01-03 03:14:01
回答 3查看 260关注 0票数 1

我试图在非活动类中使用openFileOutput方法。当我尝试使用上下文时,来自MainActivity (this)的程序崩溃。

在我的课堂上用这种方法?

代码语言:javascript
复制
private Context context;

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

public void setEvent(int year, int month, int dayNumber, int hour, int minutes, String event, String eventParameters) {
    try {
        OutputStreamWriter events = new OutputStreamWriter(context.openFileOutput("events.txt", Context.MODE_PRIVATE));         

    } catch(IOException e) {
        e.printStackTrace();
    } // End of try  
} // End of method - setEvent

我有一个个性化的对话框,它用来调用setEvent方法。

代码语言:javascript
复制
public CellOptions(final Dialog dialog) {

final Events event = new Events(dialog.getContext());       
final TextView newEvent = (TextView) dialog.findViewById(R.id.newEvent), eventView = (TextView) dialog.findViewById(R.id.eventView);

newEvent.setOnClickListener(new View.OnClickListener() {
    public void onClick(View option) {
        event.setEvent(2018, 0, 1, 0, 0, "New year", "Nothing");

        eventView.setBackgroundColor(Color.rgb(0, 0, 8));
    }
});
}

public boolean showed() {
    return true;
}

我也尝试在下一个表单的setEvent类中使用MainActivity。

Events event = new Events(this, the next parameters);

但不起作用。

我已经找到了关于这个问题的答案,但我找不到一个帮助我的解决办法。

我找到了这几页,但同样的问题还在继续。

how to call method in activity form non activity class

Getting activity from context in android

using openFileOutput() in a class. (not an activity)

http://www.sgoliver.net/blog/ficheros-en-android-i-memoria-interna/

当我运行我的程序时,它会在使用上下文时崩溃。

Logcat显示如下:

01-03 15:55:25.932: W/ binder (632):从绑定存根实现捕获一个RuntimeException。01-03 15:55:25.932: W/Binder(632):java.lang.NullPointerException 01-03 15:55:25.932: W/Binder(632):at com.android.internal.view.IInputMethod$Stub.onTransact(IInputMethod.java:129) 01-03 15:25.932: W/Binder(632):at com.android.internal.view.IInputMethod$Stub.onTransact(IInputMethod.java:129) 01-03 15:55:25.932: W/Binder(632):at android。os.Binder.execTransact(Binder.java:404) 01-03 15:55:25.932: W/Binder(632):at dalvik.system.NativeStart.run(原生方法) 01-03 15:55:25.932: W/InputMethodManagerService(487):Got发送setActive(假)通知pid 2744 uid 10036 01-03 15:55:26.572: I/ActivityManager(487):显示com.android.Droadcalendary/.主setActive:+4s402ms

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-03 03:30:35

在非活动类中使用活动方法?很短的故事是,你不能

但是确实有一种方法,您可以传递您的活动(这通常不是一个好主意,如果您的活动被破坏,它会导致空指针或内存泄漏)。

另一种方法是,如果需要上下文,可以使用ApplicationContext。

票数 1
EN

Stack Overflow用户

发布于 2019-01-03 04:47:00

使用ApplicationContext而不是上下文。因为这个上下文的生命周期将被保存,直到应用程序被销毁或完成。因此,上下文只保留到活动被销毁为止。

代码语言:javascript
复制
getApplicationContext();      
票数 0
EN

Stack Overflow用户

发布于 2019-01-04 01:52:45

我已经解决了这个问题。

该方法在活动中工作,要在非活动类中使用该方法,我确实使用了:

getApplicationContext();

我确实使用了它,从MainActivity开始发送上下文,通过CellOptions类发送,在CellOptions类中,我确实发送了相同的上下文。

MainActivity:

代码语言:javascript
复制
new CellOptions(cellOptions, getApplicationContext());

CellOptions类(上下文=应用程序上下文):

代码语言:javascript
复制
Events event = new Events(context);

事件类:

代码语言:javascript
复制
context.openFileOutput(events.txt);

另一个问题是我使用了"/",而使用了"\“

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54015860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档