Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t将文本视图的值设置为activity或fragment类中非静态方法的结果_Java_Android_Android Fragments - Fatal编程技术网

Java Can';t将文本视图的值设置为activity或fragment类中非静态方法的结果

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

我有一个活动--Portfolio活动--我试图将文本视图的值设置为方法--GetPriceOfcins--的结果,调用该方法时从sqlite数据库检索并返回一个值。创建活动时,将更改文本视图以反映数据库中记录的值

我目前正在使用这些方法:这部分工作正常

      //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它是一个公共静态,因此不需要在同一个类中。您可以静态地调用它