在Android中,如何通过Intent在活动之间传递输入流?

在Android中,如何通过Intent在活动之间传递输入流?,android,android-intent,inputstream,Android,Android Intent,Inputstream,我有一个InputStream对象 InputStream _fileInput; 我想将其发送到另一个活动,比如: Intent intent = new Intent(MainActivity.this, ChildActivity.class); 我该怎么做呢?您不能通过意图传递它,也不能作为额外的(因为它不是可打包的),您可以在main活动中创建一个公共getter方法,并在子活动中调用它 示例代码: class MainActivity { private static

我有一个
InputStream
对象

InputStream _fileInput;
我想将其发送到另一个活动,比如:

Intent intent = new Intent(MainActivity.this, ChildActivity.class);

我该怎么做呢?

您不能通过
意图
传递它,也不能作为
额外的
(因为它不是
可打包的
),您可以在main活动中创建一个公共
getter
方法,并在
子活动中调用它

示例代码:

class MainActivity {

    private static InputStream mInputStream;

    @Override
    protected onCreate(...) {

        mInputStream = new InputStream(.....);

        Intent i = new Intent(MainActivity.this, ChildActivity.class);
        startActivity(i);
    }

    public static getInStream() {
        return mInputStream;
    }
}


class ChildActivity {

    @Override
    protected onCreate(...) {
        InputStream theInputStream = MainActivity.getInStream();
    }

}
我认为这不是最好的解决方案,但它仍然很重要,我认为我永远不会在活动之间传递输入流之类的东西

如果我能问,你为什么需要这个


解决方案2-使用帮助器类

您可以使用Singleton
Helper
类来轻松跟踪所需的对象

类助手将是:

class Helper {

    private static Helper mHelper;
    private InputStream mInputStream;

    private Helper(){

    }


    public static Helper getInstance() {
        if (mHelper != null)
            return mHelper;

        return new Helper();
    }


    public void setInputStreamer(InputStream is){
        mInputStream = is
    }

    public InputStream getInputStreamer(){
        return mInputStream
    }
}
然后在
main活动中调用:

is = new InputStream(...);
Helper.getInstance().setInputStreamer(is);

Intent i = new Intent(MainActivity.this, ChildActivity.class);
startActivity(i);
InputStream theInputStream = Helper.getInstance().getInputStreamer();
在您的
ChildActivity
通话中:

is = new InputStream(...);
Helper.getInstance().setInputStreamer(is);

Intent i = new Intent(MainActivity.this, ChildActivity.class);
startActivity(i);
InputStream theInputStream = Helper.getInstance().getInputStreamer();

您不能通过
Intent
传递它,也不能作为
额外的
(因为它不是
可打包的
),您可以在MainActivity中创建一个公共
getter
方法,并在
子Activity
中调用它

示例代码:

class MainActivity {

    private static InputStream mInputStream;

    @Override
    protected onCreate(...) {

        mInputStream = new InputStream(.....);

        Intent i = new Intent(MainActivity.this, ChildActivity.class);
        startActivity(i);
    }

    public static getInStream() {
        return mInputStream;
    }
}


class ChildActivity {

    @Override
    protected onCreate(...) {
        InputStream theInputStream = MainActivity.getInStream();
    }

}
我认为这不是最好的解决方案,但它仍然很重要,我认为我永远不会在活动之间传递输入流之类的东西

如果我能问,你为什么需要这个


解决方案2-使用帮助器类

您可以使用Singleton
Helper
类来轻松跟踪所需的对象

类助手将是:

class Helper {

    private static Helper mHelper;
    private InputStream mInputStream;

    private Helper(){

    }


    public static Helper getInstance() {
        if (mHelper != null)
            return mHelper;

        return new Helper();
    }


    public void setInputStreamer(InputStream is){
        mInputStream = is
    }

    public InputStream getInputStreamer(){
        return mInputStream
    }
}
然后在
main活动中调用:

is = new InputStream(...);
Helper.getInstance().setInputStreamer(is);

Intent i = new Intent(MainActivity.this, ChildActivity.class);
startActivity(i);
InputStream theInputStream = Helper.getInstance().getInputStreamer();
在您的
ChildActivity
通话中:

is = new InputStream(...);
Helper.getInstance().setInputStreamer(is);

Intent i = new Intent(MainActivity.this, ChildActivity.class);
startActivity(i);
InputStream theInputStream = Helper.getInstance().getInputStreamer();

主要活动是逐个读取excel文件(输入流)和ChildActivity阅读表,并调用函数绘制数据。每个模块都可以单独工作,但我被卡在这里了。我建议您将此逻辑保留在活动之外,活动应仅用于处理用户交互。非用户交互的所有内容都应该委托给其他组件。我将编写一个类,该类接受一个文件,读取它,并与另一个类交互以读取工作表。然后定义适当的方法来创建活动和“ExcelReader”类Hello之间的交互,正如您的建议,我使用了上述技术,即使其成为静态变量。它返回另一个类中的变量,但当我使用它时,它表示空值引用。我很高兴它这样做了!记住接受答案,然后!祝您有个美好的一天!答案右侧有一个标记,就在votesMain活动的下方,它正在逐个读取excel文件(输入流)和ChildActivity阅读表,并调用函数绘制数据。每个模块都可以单独工作,但我被卡在这里了。我建议您将此逻辑保留在活动之外,活动应仅用于处理用户交互。非用户交互的所有内容都应该委托给其他组件。我将编写一个类,该类接受一个文件,读取它,并与另一个类交互以读取工作表。然后定义适当的方法来创建活动和“ExcelReader”类Hello之间的交互,正如您的建议,我使用了上述技术,即使其成为静态变量。它返回另一个类中的变量,但当我使用它时,它表示空值引用。我很高兴它这样做了!记住接受答案,然后!祝您有个美好的一天!答案的右边在选票的正下方有一个标记