【问题标题】:How to pass Input Stream between Activities via Intent in Android?如何在 Android 中通过 Intent 在活动之间传递输入流?
【发布时间】:2016-07-21 13:32:45
【问题描述】:

我有一个InputStream 对象

InputStream _fileInput;

我想把它发送到另一个活动,比如说:

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

我该怎么做?

【问题讨论】:

    标签: android android-intent inputstream


    【解决方案1】:

    你不能通过Intent 传递它,也不能作为Extra(因为它不是Parcelable)你可以在你的MainActivity 中创建一个公共的getter 方法并在你的ChildActivity 中调用它。 .

    示例代码:

    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();
        }
    
    }
    

    恕我直言,这不是最好的解决方案,但它仍然是一些东西,我以为我永远不会在活动之间传递像 InputStream 这样的东西..

    如果我可以问,你为什么需要这个?


    解决方案 2 - 使用 Helper 类

    您可以使用 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
        }
    }
    

    然后在您的MainActivity 电话中:

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

    在您的ChildActivity 电话中:

    InputStream theInputStream = Helper.getInstance().getInputStreamer();
    

    【讨论】:

    • 主要活动是读取excel文件(输入流)和ChildActivity一张一张地读取Sheet并调用函数来绘制数据。每个模块都可以单独工作,但我被困在这里
    • 我建议您将此逻辑保留在活动之外,应使用活动来处理用户交互。所有不是用户交互的东西都应该委托给其他组件。我会写一个类,它需要一个文件,读取它并与另一个类交互以读取工作表。比您定义适当的方法来创建 Activity 和“ExcelReader”类之间的交互
    • 您好,正如您的建议,我使用了上述技术,即使其成为静态变量。它返回其他类中的变量,但是当我使用它时,它说空值引用。
    • 我很高兴它做到了!记得采纳答案哦!祝你有美好的一天!
    • 选票下方的答案右侧有一个标记
    猜你喜欢
    • 2021-09-08
    • 1970-01-01
    • 2017-01-10
    • 2015-03-05
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多