2012-04-16 11 views
0

私は基本的に何らかのログインフォームを騙して、来るべきアクティビティでユーザー名を使ってカスタマイズされたhelloを言うことを試みています。コードは問題なくコンパイルされますが、ログインボタンをクリックするとアプリケーションがクラッシュし、ログインが正常に動作してからカスタマイズされたhelloを実装しようとしました。問題は次のコードのどこかにあるはずです。私は活動を呼ぶのはここアクティビティ間でデータを送信中にクラッシュします

は次のとおりです。私は、余分なデータを取得し、説明するように、それを使用しようとするのはここ

Intent k = new Intent(this, MainActivity.class); 
      //Sends login name to activity k 
      k.putExtra("loginName", login.getText().toString()); 
//login is the EditText variable name for the login text field 
      startActivity(k); 

は次のとおりです。

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 

public class ProfileActivity extends Activity { 

    TextView helloString; 

    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.home); 
     Bundle extras = getIntent().getExtras(); 

     //Getting the hello text string 
     helloString = (TextView)findViewById(R.id.textHello); 
     String loginName = extras.getString("loginName"); 
     helloString.setText("¡Hello, " + loginName + "!"); 

    } 

} 

私は置けばそれは何とかクラッシュを回避しますコメントでは、これらの2つの行:

String loginName = extras.getString("loginName"); 
helloString.setText("¡Hello, " + loginName + "!"); 

まだ、私は問題が本当にあるかどうかは確かではありません、私はthoug最初のアクティビティから送信されたデータのタイプと、2番目のタイプで検索されているタイプに一致しないデータとの関係があるかもしれませんが、それを回避しようとするとヒントは得られません。

ありがとうございます。

編集:

私は実際に、私は、テキストは問題があり、profileActivity.classと呼ばれる活動に示されている間、私はmainActivity.classに呼び出していたという事実とは何かを持っていることが分かりましたprofileActivityはmainActivityの中にタブとして表示されているので、私はそれにどのようにアプローチすべきか分かりません。

編集2:

だから私はにProfileActivityを呼び出すときに、私はちょうど、MainActivity.class

Intent k = new Intent(this, MainActivity.class); 

      //Sends login name to activity k 
      k.putExtra("loginName", login.getText().toString()); 
      startActivity(k); 

そして、メインのアクティビティ内部にデータを送っ興味がある人のために、最終的には自分自身をそれを解決タブとして設定してください:

//Profile tab 
      intent = new Intent(this, ProfileActivity.class); 
      Bundle extras = getIntent().getExtras(); 
      intent.putExtra("loginName", extras.getString("loginName")); 
      spec = mTabHost.newTabSpec("home") 
        .setIndicator("Home", res.getDrawable(R.drawable.profile_icon)) 
        .setContent(intent); 
      mTabHost.addTab(spec); 

問題を解決しました。皆さん、助けてくれてありがとうございます。

+1

logcatを確認してここに投稿すると、クラッシュの原因がわかります。 – Jems

+0

MainActivityにデータを送信していますが、ProfileActivity ..からインテントデータを読み取っています。これについては確かですか? –

+0

ええ、私はちょうどそれについてコメントしました、私は問題だと思うが、ProfileActivityはMainActivityのタブの中にあるので、私は実際にそれに近づく方法を本当に知らない、私は投稿前にそれを見なかったことは認めている私たちは今一歩前進したと思います。 –

答えて

1

あなたの意図はMainACtivity.classを参照しており、ProfileActivityで追加情報を取得しようとしています。 MainActivity.classをProfileActivity.classに変更してください。これがフローの場合は試してみてください。アクティビティのフローを確認してください。

希望します。

Intent k = new Intent(this, ProfileActivity.class); 
      //Sends login name to activity k 
      k.putExtra("loginName", login.getText().toString()); 
//login is the EditText variable name for the login text field 
      startActivity(k); 
+0

はい、この方法では動作しますが、開こうとしているアクティビティが開かれていません。主なのは、ProfileActivityがMainActivityの内部にタブとして表示されているので、MainActivityを開いたままProfileActivityにデータを送信する必要があることです。 –

0

データをProfileActivityに送信したいが、MainActivityを開く必要があると述べたので、4つのアプローチのいずれかを実行できます。

注:getExtraの使用時にチェックして、戻り値がnullでないことを確認し、それに応じて対処する必要があります。

  1. あなたはMainActivityからProfileActivityを起動したときに、以前に渡されたデータを送信し、MainActivityに最初にデータを送信し、。
  2. ProfileActivity内のpublic staticフィールドのデータを入れてください。パブリック静的変数は問題につながる可能性があるので、私はこれに対して推奨します。
  3. データをsharedPreferencesファイルに保存し、ProfileActivityで必要なときに読み取ります。
  4. SubClass Applicationで、さまざまな変数を設定/アクセスできます。以下はAre static fields in Activity classes guaranteed to outlive a create/destroy cycle?からコピーされました。

    パブリッククラスMyApplication extends Application { private String thing = null; MainActivityで

    public String getThing(){ 
         return thing; 
        } 
    
        public void setThing(String thing){ 
         this.thing = thing; 
        } 
    } 
    
    public class MyActivity extends Activity { 
        private MyApplication app; 
    
        public void onCreate(Bundle savedInstanceState) { 
         super.onCreate(savedInstanceState); 
    
         app = ((MyApplication)getApplication()); 
    
         String thing = app.getThing(); 
        } 
    } 
    
0

String user = this.getIntent().getStringExtra("loginName"); 

をそして、あなたはMainActivityにtabhostを作成するときに文字列を同じ方法で渡します。このような

Intent intent = new Intent().setClass(this, ProfileActivity.class); 
intent.putExtra("loginName", user); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
// Initialize a TabSpec for each tab and add it to the TabHost 
spec = mTabHost.newTabSpec("profile").setIndicator("Profile").setContent(intent); 
mTabHost.addTab(spec); 

何かを。

しかし、アプリケーション全体でユーザー名が必要な場合は、ヘルパークラスを使用してユーザー名を格納します。

関連する問題