如何从静态方法执行非静态方法

Posted

技术标签:

【中文标题】如何从静态方法执行非静态方法【英文标题】:How to execute a non static method from a static method 【发布时间】:2014-09-04 03:31:32 【问题描述】:

我是 android/java 开发的新手,所以我遇到了一些问题,这就是其中之一。 我想在getTickets 中使用recevieResults 返回的结果。我试图将 getTickets 设为静态,但它有

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0);

因此静态方法不允许 getApplicationContext。

public static void receiveResults(String result2) 

usersXML = result2; 




public void getTickets() 

//this method users usersXML from above and needs to execute after receiving the results


【问题讨论】:

更改为 public static void getTickets(Context ctx) 并将 getApplicationContext() 替换为 ctx。你必须从你的活动/片段/无论如何传递Context 如何从我的活动中传递上下文?很抱歉我缺乏知识,非常感谢您的帮助! @user3785656 是否有任何具体原因让您将 receiveResults(..) 方法设为静态? 我将结果从另一个活动发送到这些方法所在的活动 - 如果我只是将结果变量设为静态,它不会以正确的顺序执行。希望这是有道理的!谢谢 不能从静态方法调用非静态方法。你必须改变其中之一...... 【参考方案1】:

如果你有课:

public class ViewTicket extends Activity 
    public static <result> recieveResults(Context context, String result2) 
        ViewTicket ticket = (ViewTicket) context;

        return <result>
    

    public void getTickets(<result> result) 
        // user <result> as you wish.
        SharedPreference pref = this.getSharedPreferences("MyPref", 0);
    



调用静态方法并将对象传递给它。

ViewTicket myTicket = new ViewTicket();
<result> = ViewTicket.recieveResults(myTicket, "<someString>");

myTicket.getTickets(<result>);

【讨论】:

您应该将“Activity”替换为您的活动名称,因为它正在扩展活动。 我试过了: public static void receiveResults(String result2) usersXML = result2; getTickets(这个); public void getTickets(Context context) ViewTickets _activity = (ViewTickets) context; SharedPreferences pref = _activity.getApplicationContext().getSharedPreferences("MyPref", 0); //该方法使用上面的usersXML,收到结果后需要执行 在另一个活动中,我使用该方法传递结果 viewTickets.receiveResults(result);所以我也需要添加上下文吗? 更新的答案,我认为这就是你所需要的。

以上是关于如何从静态方法执行非静态方法的主要内容,如果未能解决你的问题,请参考以下文章

简述(非)静态代码块和构造方法的执行顺序

如何从另一个类调用非静态抽象方法

如何从网络方法调用非静态方法

java中为啥说静态方法先执行?

java ,为啥无法从静态上下文中引用非静态方法

在静态方法AJAX中访问非静态方法