Java Can';t将文本视图的值设置为activity或fragment类中非静态方法的结果
我有一个活动--Portfolio活动--我试图将文本视图的值设置为方法--GetPriceOfcins--的结果,调用该方法时从sqlite数据库检索并返回一个值。创建活动时,将更改文本视图以反映数据库中记录的值 我目前正在使用这些方法:这部分工作正常Java Can';t将文本视图的值设置为activity或fragment类中非静态方法的结果,java,android,android-fragments,Java,Android,Android Fragments,我有一个活动--Portfolio活动--我试图将文本视图的值设置为方法--GetPriceOfcins--的结果,调用该方法时从sqlite数据库检索并返回一个值。创建活动时,将更改文本视图以反映数据库中记录的值 我目前正在使用这些方法:这部分工作正常 //In the activity class: public double getPriceOfCoins(String coinType) { UserData userData = ne
//In the activity class:
public double getPriceOfCoins(String coinType) {
UserData userData = new UserData(getApplicationContext());
SQLiteDatabase database = userData.getReadableDatabase();
String rows_to_return[] = {"price_of_coin"};
Cursor cursor = database.query("portfolio", rows_to_return, "type_of_coin = '" + coinType + "'", null, null, null, null);
Log.d("woops", cursor.getColumnCount() + "");
Log.d("woops", cursor.moveToFirst() + "");
return cursor.getDouble(0);
}
在内部片段类中:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_port_folio, container, false);
TextView priceView = (TextView) rootView.findViewById(R.id.portfolio_value_of_bitcoin_label);
priceView.setText(getPriceOfCoins("Bitcoin") + "");
return rootView;
}
这不会编译,因为我无法从静态片段内部类引用非静态getPriceOfcins方法;另一方面,我不能将它放在活动的OnCreate方法中,因为findViewById在运行时会产生空指针异常
关于堆栈溢出的其他主题的研究表明,后一个错误的发生是因为布局尚未膨胀——这是
在内部片段类的onCreateView方法中发生
我能想到的唯一解决方法是在类的顶部声明priceView变量,在onCreateView方法中定义它,然后在代码的其他地方设置它的文本值。这不是一个解决方案,因为我不知道在哪里设置文本值,以便每次调用onCreate时都会发生,或者实时发生
我想知道这个问题是否有解决办法
PS:数据库通过对网站的http请求在另一个活动中获取其值。您可以将该方法设置为静态,添加上下文作为参数:
public static double getPriceOfCoins(Context contex, String coinType) {
UserData userData = new UserData(context);
}
然后像调用
NameOfActivity.getPriceOfCoins
一样调用它,或者如果承载该片段的活动与具有该方法的活动相同,则可以将getActivity()的返回值强制转换为活动,并对强制转换的值调用该方法,有许多方法可以处理此问题。GetPriceOfcins()位于哪里?在你的碎片里吗?不,不是。它位于活动的类中,您可以将get活动强制转换为主活动,然后从中调用方法。((MainActivity)get Activity()).GetPriceOfcins();和下面的答案混在一起对不起。应该澄清。那部分不在片段中。我犯了一个错误。它在常规活动中。@user126553它是一个公共静态,因此不需要在同一个类中。您可以静态地调用它