Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.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 将数据加载到片段中,然后在其他类中使用该数据_Java_Android_Android Fragments - Fatal编程技术网

Java 将数据加载到片段中,然后在其他类中使用该数据

Java 将数据加载到片段中,然后在其他类中使用该数据,java,android,android-fragments,Java,Android,Android Fragments,如何正确地从片段内的文件导入数据,然后在其他类/活动/片段中使用来自全局变量的数据 我目前有: AssetManager manager = getActivity().getAssets(); 在MyFragment类中 该片段在另一个片段中实例化: MyFragment mf = new MyFragment(); 以便能够获取包含从文件加载的数据的变量 我在Java中使用MyFragment类没有任何问题,从任何文件夹加载文件,但在这里,我需要上下文,并从assets文件夹获取文件 但

如何正确地从片段内的文件导入数据,然后在其他类/活动/片段中使用来自全局变量的数据

我目前有:

AssetManager manager = getActivity().getAssets();
在MyFragment类中

该片段在另一个片段中实例化:

MyFragment mf = new MyFragment();
以便能够获取包含从文件加载的数据的变量

我在Java中使用MyFragment类没有任何问题,从任何文件夹加载文件,但在这里,我需要上下文,并从assets文件夹获取文件

但是,当我想在MyFragment类中获取assets()时,我会得到null(即使文件夹中有文件)

以下是MyFragment的代码:

MyFragment mf = new MyFragment();
public class FileReader extends Fragment {
    private AssetManager manager;
    private InputStream is;

    public void loadIDs(){
//        try {
            manager = getActivity().getAssets();
//        } catch (NullPointerException e){
//            e.printStackTrace();
//        }
        //File file = new File("IDs.txt");
        try {
            is = manager.open("IDs.txt");
            Scanner in = new Scanner(is);
            totalBuses = in.nextInt();
            IDs = new String[totalBuses];
            for(int i=0; i<totalBuses; i++){
                IDs[i] = in.next();
            }
            in.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (NullPointerException e){
            e.printStackTrace();
        }
    }
}
公共类FileReader扩展片段{
私人资产管理人;
私有输入流是;
公共void loadIDs(){
//试一试{
manager=getActivity().getAssets();
//}catch(NullPointerException e){
//e.printStackTrace();
//        }
//File File=新文件(“IDs.txt”);
试一试{
is=manager.open(“IDs.txt”);
扫描仪输入=新扫描仪(is);
totalbus=in.nextInt();
IDs=新字符串[TotalBus];

对于(int i=0;i直接使用它构造函数实例化片段通常不是一个好的做法。首选方法是使用
newInstance()
static方法。更多信息:

但是,既然您不是将片段用作视图,而是作为帮助器类,那么将
上下文
作为对
文件读取器
构造函数的依赖项传递怎么样


fr=newfilereader(getActivity())

直接使用它的构造函数实例化片段通常不是一个好的做法。首选的方法是使用
newInstance()
静态方法。更多信息:

但是,既然您不是将片段用作视图,而是作为帮助器类,那么将
上下文
作为对
文件读取器
构造函数的依赖项传递怎么样


fr=newfilereader(getActivity())

是的,您必须拥有,因此绑定所需数据的静态工厂方法是一个不错的选择。请:在构建片段时避免使用任何类型的参数。无论片段是否具有UI,系统都必须在需要时重新构建片段,并使用默认的空构造函数,而不是你所提供的不是完全正确的!在构造片段时,你需要避免参数。你需要避免的是直接将参数传递给构造函数。相反,你应该使用一个静态方法,将传递给它的任何参数捆绑起来,并在构建片段时将其设置在捆绑包中。Th至少Android可以安全地重建该片段。但无论如何,在这种情况下,这并不重要,因为用例非常有限。是的,您必须拥有,因此绑定所需数据的静态工厂方法是一个很好的选择。请:在构建片段时避免使用任何类型的参数。片段是否具有无论是否是UI,如果需要,系统都必须重新生成您的片段,并且将使用默认的空构造函数,而不是您提供的构造函数!这不是完全正确的,您在构建片段时需要避免参数。您需要避免的是将参数直接传递给构造函数。相反,您应该使用静态方法that将捆绑您传递给它的任何参数,并在构建片段时将其设置在捆绑包中。这样Android就可以安全地重建该片段。但无论如何,在这种情况下,这并不重要,因为用例非常有限