2012-04-16 3 views
0

그래서 기본적으로 로그인 양식을 사용하여 다음 활동에서 사용자 이름을 사용하여 사용자 정의 된 인사말을 말하려고합니다. 코드는 아무런 문제없이 컴파일되지만 로그인 버튼을 클릭하자마자 앱이 다운되고 로그인이 성공적으로 완료된 후 사용자 정의 된 안녕을 구현하기 전에 문제가 다음 코드의 어딘가에 있어야합니다. 내가 추가 데이터를 검색하고 설명 된대로 사용하려고 경우활동간에 데이터를 보내는데 크래시가 발생했습니다.

다음
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 + "!"); 

    } 

} 

을 내가 넣어 경우 어떻게 든 충돌을 피할 여기

내가 활동을 부르는 곳이다 덧글에이 두 줄을 :

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

여전히 문제가 있는지 없는지 나는 확신 할 수 없다. 그것은 두 번째에 검색되는 유형과 일치하지 않는 첫 번째 활동에서 보낸 데이터 유형과 관련이있을 수 있지만 그 주변의 물건을 시도한 후에는 단서가 없습니다.

미리 감사드립니다.

편집이

: 나는 실제로 내가 텍스트가 profileActivity.class라는 활동에 표시되는 동안 나는 mainActivity.class에 전화하고 있다는 사실과 함께 할 수있는 뭔가가있을 수 있음을 발견

, 문제는, profileActivity는 mainActivity 내부에 탭으로 표시되므로 어떻게 접근해야하는지 잘 모르겠습니다.

편집 2 :

그래서 내가 관심있는 사람들을 위해, 마지막으로 자신을 그것을 해결 난 그냥 메인 액티비티 내부의 MainActivity.class

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

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

로 데이터를 전송 그리고,에 ProfileActivity를 호출 할 때 탭으로 설정하십시오.

//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로 변경해보십시오. 흐름이있는 경우 MainActivity.class를 변경하십시오. 활동 흐름을 확인하십시오.

희망이 있습니다. 당신은 당신이 ProfileActivity로 전송되는 데이터를 원하지만 MainActivity를 열 필요가 있음을 언급 한 이후

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

, 당신은 4 개 방법 중 하나를 따를 수 있습니다.

참고 : getExtra를 사용할 때, 반환 값이 null이 아닌지 확인하고 이에 따라 처리해야합니다.

  1. 는 MainActivity에 먼저 데이터를 전송, 당신은 MainActivity에서 ProfileActivity를 시작할 때 다음, 이전에 전달 된 데이터를 전송합니다.
  2. 는 ProfileActivity의 공용 정적 필드에 데이터를 넣습니다. 공개 정적 변수로 인해 문제가 발생할 수 있으므로 이에 대해 권장합니다.
  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); 

뭔가.

그러나 전체 응용 프로그램에서 사용자 이름이 필요하면 사용자 이름을 저장하기 위해 도우미 클래스를 사용하십시오.

관련 문제