2017-08-05 118 views
3

我試圖從一項活動向另一項活動傳遞信息(更具體地說是一個信息類)。在我的應用程序中,我有一個負責加載和初始化變量的啓動畫面。我們的目標是將這些信息提供給實際的遊戲本身,以便使用它,但我不知道如何去做。在我的閃屏類我有這樣的方法,它負責從閃屏移動到遊戲,一旦一切都裝:Android:將信息從一項活動傳遞到另一項

private void moveToGame() { 
    loop.setRunning(false); 
    act.startActivity(new Intent(splash, MainActivity.class)); 
    act.finish(); 
    return; 
} 

然後主活動類有這行代碼,以獲得實際的遊戲:

setContentView(new Environment(this, this)); 

Environment類的構造函數是Environment(Context context, Activity act)

的目標是到constuctor更改爲Environment(Context context, ActivityAct, LoadInfo li),但我怎麼一路傳遞信息給Environment構造函數?

編輯1 - LoadInfo類

public class LoadInfo { 
    private HashMap<String, Typeface> fonts; 
    private HashMap<String, Image> images; 
    private File logFile; 
    private File settingsFile; 
    private File gameDir; 

    public LoadInfo() {} 

    public LoadInfo(HashMap<String, Typeface> fonts, HashMap<String, Image> images, File logFile, File settingsFile, File gameDir) { 
     this.fonts = fonts; 
     this.images = images; 
     this.logFile = logFile; 
     this.settingsFile = settingsFile; 
     this.gameDir = gameDir; 
    } 

    public HashMap<String, Typeface> getFonts() { 
     return fonts; 
    } 

    public HashMap<String, Image> getImages() { 
     return images; 
    } 

    public File getLogFile() { 
     return logFile; 
    } 

    public File getSettingsFile() { 
     return settingsFile; 
    } 

    public File getGameDir() { 
     return gameDir; 
    } 

    public void setFonts(HashMap<String, Typeface> fonts) { 
     this.fonts = fonts; 
    } 

    public void setImages(HashMap<String, Image> images) { 
     this.images = images; 
    } 

    public void setLogFile(File logFile) { 
     this.logFile = logFile; 
    } 

    public void setGameDir(File gameDir) { 
     this.gameDir = gameDir; 
    } 

    public void setSettingsFile(File settingsFile) { 
     this.settingsFile = settingsFile; 
    } 

    public boolean fullyLoaded() { 
     return fonts != null && images != null && logFile != null && gameDir != null && settingsFile != null; 
    } 

    public String toString() { 
     if(logFile == null) 
      return "well no file to load"; 
     return logFile.toString(); 
    } 
} 
+0

什麼是** LoadInfo ** ..? –

+0

@MuthukrishnanRajendran包含我想傳遞給'Environment'的所有信息的類。例如,我會在'LoadInfo'中有一個看起來像'public int getValue()'的方法,然後它將返回在啓動畫面期間初始化的值。 – Ryan

+0

您可以添加有問題的LoadInfo類。 –

回答

3

你可以讓你LoadInfo爲Serializable像下面,

public class LoadInfo implements Serializable { 
    // your code, 
} 

,並在你飛濺的活動,您可以發送這樣的,

//LoadInfo loadInfo = new LoadInfo(); this may be your loadInfo object 

Intent intent = new Intent(act, MainActivity.class); 
intent.putExtra("load_info", loadInfo); // Add your LoadInfo object here 
act.startActivity(intent); 

在您的MainActvity中,您可以像這樣得到

LoadInfo loadInfo = (LoadInfo) getIntent().getSerializableExtra("load_info"); 
setContentView(new Environment(this, this, loadInfo)); 
+0

這似乎工作,但我得到一個錯誤,我不知道它是否是這個結果。當我嘗試調用'loadInfo.toString()'時,我得到'NullPointerException',包括初始'LoadInfo'類創建的閃屏類。實際上,我爲每個「get」方法都得到'NullPointerException's,即使我檢查了確保對象(在本例中爲'File')不爲null。這是這個或其他現在明顯的問題的結果嗎? – Ryan

+0

在你的問題中添加你的代碼,我會檢查並讓你知道 –

+0

完成,如果你需要更多的上下文讓我知道。感謝您的全力幫助 – Ryan

-2

在遊覽發送者的意圖的活動,你應該做這樣的小例子: String username="Christian"; int code=123456; Intent i=new Intent(this,ReceiverActivity.class); i.putextra("user",username); i.putextra("code",code);

而在ReceiverActivity您收到的信息是這樣的: Intent i=getIntent(); String usr=i.getStringExtra("user"); int code=i.getIntExtra("code");

0

警告:Intent額外的有極限1Mb

要將信息從一個Activity傳遞到另一個,通常使用Intent多餘,但它具有1MB數據的限制。在你的問題中,你正在使用LoadInfo類,我相信它可以輕鬆傳遞1MB的大小,因爲它會加載遊戲信息。

建議:您可以選擇執行ApplicationService(即Bound Service)到這個實例存儲LoadInfo和所有的活動都可以訪問這個實例。

更多提示:你也可以使用一個Singleton類存儲的LoaderInfo這種情況下,但你應該關閉你的遊戲中的所有活動後,將其刪除。

觀測數據:閃屏爲Activity,你一定要記住,從Back Stack刪除它,否則,當用戶點擊回來,這將返回飛濺Activity

+0

我會研究這些建議,因爲我同意'LoadInfo'類也可以輕鬆傳遞1MB。至於Splash Screen作爲'Activity',我還沒有在模擬器或物理設備上遇到過這個問題。 – Ryan

+0

你說得對,因爲你正在使用'act.finish();',這會破壞這個'Activity',所以在'Back Stack'中刪除它。 –

相關問題