当前位置: 首页 > 知识库问答 >
问题:

Java-不能从静态上下文引用非静态方法

章鸿光
2023-03-14

mainactivity.java:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        try {
            XMLReader r = new XMLReader();
            r.Reader(getXML());
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //Creates each station
    public void newStation(int stationID, String stationName)
    {
        DBHandler dbHandler = new DBHandler(this, null, null, 1);

        Station station = new Station(stationID, stationName);

        dbHandler.addStation(station);
    }

    private String getXML()
    {
        //code to get xml
        return xml;
    }
}

xmlReader.java:

public class XMLReader {
    public void Reader (String xmlFile) throws XmlPullParserException, IOException
    {
        String[] stationData = new String[]{"",""};
        //code to cut xml file up and put it into stationData
        MainActivity.newStation(Integer.parseInt(stationData[0]), stationData[1]);
    }
}

(如果需要,我也可以为station.java和dbhandler.java添加代码)

我怎样才能绕过这个编程悖论呢?我通常能为这里的任何问题找到答案,但这是我第一次找不到答案。如果你知道我错过的解决方案的链接,请在下面发布。多谢。

共有1个答案

景宏盛
2023-03-14

您已经有一个mainactivity类型的对象。这一个调用方法来读取XML。

顺便说一下,请坚持Java代码约定,用小写字母开头方法名。另外,方法总是做一些事情,所以它们应该是动词:

public class XMLReader {
    public void read (String xmlFile) ...
}

最简单的方法是返回解析的数据,并从MainActivity内部调用NewStation方法:

public class XMLReader {
    public String[] read (String xmlFile) throws XmlPullParserException, IOException {
        String[] stationData = new String[]{"",""};
        //code to cut xml file up and put it into stationData
        return stationData;
    }
}

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        try {
            XMLReader r = new XMLReader();
            String[] stationData = r.read(getXML());
            newStation(Integer.parseInt(stationData[0]), stationData[1]);
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void newStation(int stationID, String stationName) { ... }
    private String getXML() { ... }
}
 类似资料:
  • 我从这行得到“Non static method Canly be referenced from a static Context”错误: 如何恰当地形成“日期”?我看了一下API并尝试了不同的方法,但我仍然得到一个日期错误。

  • 问题内容: 在UNI atm上做Java课程,我遇到了骰子问题。 我有以下内容: 编译时,我得到:无法从静态上下文引用非静态变量n。我如何解决这个问题,同时让它从用户给定的值中随机化? 问题答案: 不是静态变量,因此您不能以静态方式()引用它。 由于它是类中的实例变量,并且您正在类中引用它,因此可以使用代替。

  • 问题内容: 我想一劳永逸地理解这一点。 为此,请原谅下面粘贴的大量代码,但是我不想遗漏任何细节。 我唯一更改的是加载的URL。但这不会导致错误。 我想将我的函数称为“ readPosiitons ”。简单的解决方案,使其静态。真正的解决方案,我不确定。 请帮助我更好地了解如何以正确的方式解决此错误。 谢谢!! 问题答案: 真正的解决方案?不要在方法中放太多东西。那是给菜鸟的。 Java是一种面向对

  • 所以我尝试绑定我的Numpad键,以便在计算器应用程序中使用它们,但当我尝试从主窗口以字符串形式发送keyEvent时。java到我的MainWindowController公共void方法它给了我一个错误“不能从静态上下文引用非静态方法”,即使我的类都不是静态的?以下是主窗口代码: } 这里是MainWindowController文件(看keyPress方法)

  • 我想更改FrameLayout的背景。这是我现在使用的代码: 但出现以下错误: 无法从静态上下文引用非静态方法“setBackground(android.graphics.drawable.drawable)”。 怎么了?

  • 我从这行中得到了“无法从静态上下文引用非静态方法”错误: