如何从静态方法执行非静态方法
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);所以我也需要添加上下文吗? 更新的答案,我认为这就是你所需要的。以上是关于如何从静态方法执行非静态方法的主要内容,如果未能解决你的问题,请参考以下文章