0

私には3つの活動があります:

  • ログインする
  • 選択
  • エントリ

ログインから選択肢へ(そしてこれはうまく機能します)、次に選択肢からエントリへと変数「名前」を渡す必要があります。これが問題です:/名前を選択肢に渡すことができますが、それを渡そうとするとエントリーすることはできません!ログインからエントリに変数を直接渡すと、それが機能するので奇妙です:/だから:

  • ログイン–>エントリは機能します!
  • ログイン–>選択は機能します!
  • 選択–>エントリが機能しません!

これは、ログインから選択に渡すコードです

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を使用することもできます。アクティビティで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);
于 2012-05-04T16:28:57.983 に答える
0

たぶん、エクストラを2回要求することと関係があります(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);
}
}

それはもっと最適化されていると思います。nomeonCreate以降idに変更されていない場合は、putExtraを再度実行する必要はありません。もしそうなら、多分onCreateは使用するのに間違った場所ですputExtra

于 2012-05-04T14:45:07.570 に答える