0

我有三个活动:

  • 登录
  • 选择
  • 入口

我必须将 var "Name" 从登录传递到选择(这很好用),然后,从选择到条目,这就是我遇到问题的地方:/ 我可以将名称传递给选择,但是当我尝试传递它时进入,我不能!这很奇怪,因为如果我将变量直接从登录名传递到条目,它可以工作:/ 所以:

  • 登录 -> 进入作品!
  • 登录 -> 选择有效!
  • 选择 -> 条目无效!

这是从登录传递到选择的代码

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

谢谢大家 :)

4

3 回答 3

5

您将您的值放入一个 Intent 对象中,然后您创建了不同的 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);

}

于 2012-05-04T14:31:10.303 回答
2

您也可以为此使用 SharedPreferences。在 Activity 中定义一个 SharedPreferences 对象。把你想要的数据放在 LoginActivity 中。从您喜欢的每个 Activity 中的 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);
于 2012-05-04T16:28:57.983 回答
0

可能与两次要求附加功能有关(onCreate 和 checkin 方法)。您可以尝试仅在 onCreate 方法中检索额外内容并将值存储在实例变量中(与实例中的所有方法共享)。就像是:

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

我认为这是更优化的。如果自 onCreate 以来没有更改,nomeid无需再次 putExtra。如果是这样,也许 onCreate 是使用错误的地方putExtra

于 2012-05-04T14:45:07.570 回答