2016-07-21 36 views
0

傳遞活動之間的InputStream我有一個InputStream對象如何通過意向

InputStream _fileInput; 

我想將它發送到另一個活動,讓我們說:

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

我怎樣才能做到這一點?

回答

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類,可以很容易地跟蹤您需要的對象。

類助手將是:

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(); 
+0

主要活動是讀取Excel文件(輸入流)和ChildActivity閱讀工作表一個接一個地調用函數來繪製數據。每個模塊都單獨工作,但我在這裏卡住 – Atif

+0

我建議你將這個邏輯保留在活動之外,活動應該只用於**來處理用戶交互。所有不是用戶交互的應該委託給其他組件。我會編寫一個接受文件的類,讀取它並與另一個類交互以讀取表單。比你定義適當的方法來創建你的活動和你的「ExcelReader」類之間的交互 – FredMaggiowski

+0

你好,作爲你的建議我使用上面的技術,即使其成爲一個靜態變量。它返回其他類中的變量,但是當我用它說空值引用。 – Atif