2012-05-04 21 views
0

我有三個活動:安卓:不能通過變量的第三個活動

  • 登錄
  • 選擇
  • 進入

我必須從登錄通過VAR 「名稱」選擇(而且這個工作很好),然後,從選擇到進入,這就是我遇到的問題:/我可以將名稱傳遞給選擇,但是當我嘗試將它傳遞給條目時,我不能!這很奇怪,因爲如果我直接從登錄變量傳遞給項,它的工作原理:/ 所以:

  • 登錄 - >進入作品!
  • 登錄 - >選擇作品!
  • 選擇 - >輸入不起作用!

這是代碼從登錄傳遞給選擇

Intent intent; 
String pkg=getPackageName();      
intent=new Intent(getApplicationContext(), scelta.class); 
//inseriamo i dati nell'intent 
String parts[] = risp.split("/"); 
intent.putExtra(pkg+".myNome", parts[0]); 
intent.putExtra(pkg+".myId", parts[1]); 
startActivity(intent); 

這是選擇(其中可能是錯誤):

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.scelta);   
    // l'intent di questa activity 
    Intent intent=getIntent(); 
    String pkg=getPackageName(); 
    //prendiamo i dati 
    String nome=intent.getStringExtra(pkg+".myNome"); 
    String Id=intent.getStringExtra(pkg+".myId"); 
    intent.putExtra(pkg+".myNome", nome); 
    intent.putExtra(pkg+".myId", Id); 
    TextView tvNome = (TextView) findViewById(R.id.txtNome); 
    tvNome.setText(nome); 
}  

//pulsante per il checkin 
public void checkin (View v) { 
    // l'intent di questa activity 
    Intent intent=getIntent(); 
    String pkg=getPackageName(); 
    //prendiamo i dati 
    String nome=intent.getStringExtra(pkg+".myNome"); 
    String Id=intent.getStringExtra(pkg+".myId"); 
    //li reinseriamo nell'intent 
    intent.putExtra(pkg+".myNome", nome); 
    intent.putExtra(pkg+".myId", Id); 
    intent=new Intent(getApplicationContext(), entrata.class); 
    startActivity(intent); 
} 

簽入的是,我使用的方法,當我點擊從選擇到輸入的按鈕。而這正是我在進入包名稱:

Intent intent=getIntent(); // l'intent di questa activity 
String pkg=getPackageName(); 
String nome=intent.getStringExtra(pkg+".myNome"); //prendiamo i dati 

TextView tvNome = (TextView) findViewById(R.id.nome); 
tvNome.setText(nome); 

感謝大家:)

回答

5

你把你的價值觀在一個Intent對象,然後創建不同的意圖,開始您的最後一個活動。

public void checkin (View v){ 

    Intent intent=getIntent(); 
    //first intent you created. 

    String pkg=getPackageName(); 
    String nome=intent.getStringExtra(pkg+".myNome"); 
    String Id=intent.getStringExtra(pkg+".myId"); 
    intent.putExtra(pkg+".myNome", nome); 
    intent.putExtra(pkg+".myId", Id); 
//you are adding extra in first intent 
    intent=new Intent(getApplicationContext(), entrata.class); 
    // here you again recreated an Intent object second intent 
    startActivity(intent); 
// you are start activity using second intent which do not contain any extra 
} 

改變這種由::

public void checkin (View v){ 

    Intent intent=getIntent(); 
    String pkg=getPackageName(); 
    String nome=intent.getStringExtra(pkg+".myNome"); 
    String Id=intent.getStringExtra(pkg+".myId"); 

    Intent intent1 = new Intent(getApplicationContext(), entrata.class); 
    intent1.putExtra(pkg+".myNome", nome); 
    intent1.putExtra(pkg+".myId", Id); 
    startActivity(intent); 

}

0

也許有事情做與要求的額外兩次(的onCreate和簽入的方法)。您可以嘗試僅在onCreate方法內部檢索extras,並將值存儲在實例變量中(以與實例中的所有方法共享)。例如:

public class choice extends Activity { 
    private String nome; 
    private String id;  //first letter lowercase in variables: Java conventions 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.scelta);   
    // l'intent di questa activity 
    Intent intent = getIntent(); 
    String pkg = getPackageName(); 
    //prendiamo i dati 
    this.nome=intent.getStringExtra(pkg+".myNome"); //this is now an instance variable 
    this.id=intent.getStringExtra(pkg+".myId");  //this is now an instance variable 
    intent.putExtra(pkg+".myNome", this.nome); 
    intent.putExtra(pkg+".myId", this.id); 
    TextView tvNome = (TextView) findViewById(R.id.txtNome); 
    tvNome.setText(this.nome); 
} 
//pulsante per il checkin 
public void checkin (View v){ 
    // l'intent di questa activity 
    //Intent intent=getIntent(); //NO NEED FOR THIS ANYMORE 
    //String pkg=getPackageName();//NO NEED FOR THIS ANYMORE 
    //prendiamo i dati 
    //String nome=intent.getStringExtra(pkg+".myNome"); //NO NEED FOR THIS ANYMORE 
    //String Id=intent.getStringExtra(pkg+".myId"); //NO NEED FOR THIS ANYMORE 
    //li reinseriamo nell'intent 

    intent=new Intent(getApplicationContext(), entrata.class); 
    intent.putExtra(pkg+".myNome", this.nome); 
    intent.putExtra(pkg+".myId", this.id); 

    startActivity(intent); 
} 
} 

我認爲這是更優化。如果nomeid自onCreate以來沒有改變,則不需要再次putExtra。如果是這樣,也許onCreate是錯誤的地方使用putExtra

2

您也可以使用SharedPreferences。在你的Activity中定義一個SharedPreferences對象。把你想要的數據放入LoginActivity中。獲取每個活動從SharedPreferences數據對象你喜歡:

在登錄活動:

SharedPreferences preferences = getSharedPreferences("preferences", MODE_WORLD_WRITEABLE); 
preferences.edit().putString("MY_NOME",this.nome).commit(); 
preferences.edit().putString("MY_ID",this.id).commit(); 

其他活動:

SharedPreferences preferences = getSharedPreferences("preferences", MODE_WORLD_WRITEABLE); 
String myNome = preferences.getString("MY_NOME", null); 
String myId = preferences.getString("MY_ID", null);