2016-07-03 1 views
1

getIntent();를 사용하려고하면 android에 있습니다. 메서드를 안드로이드에서 사용하면 null을 반환하여 응용 프로그램을 중단시킵니다. 여기 내 코드입니다 :getIntent null을 반환합니다.

public class MainActivity extends AppCompatActivity { 

    public final static String EXTRA_MESSAGE = "com.mycompany.myfirstapp.MESSAGE"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    public void sendMessage(View view) { 
     Intent intent = new Intent(this, DisplayMessageActivity.class); 
     EditText textbox = (EditText) findViewById(R.id.edit_message); 
     String message = textbox.getText().toString(); 
     intent.putExtra(EXTRA_MESSAGE, message.toString()); 
     startActivity(intent); 
    } 
} 

이 첫 번째 활동이 호출하는 두 번째 : 그것은 null을 반환 왜 ...하지 않은 의도를 사용하여 자신을 호출하기 때문에 내가 이해하지 못하는

public class DisplayMessageActivity extends AppCompatActivity { 

    Intent intent = getIntent(); 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_display_mesage); 

     String message = ""; 

     if (intent == null) { 
      Log.d("Intent", "Intent is null :("); 
     } 

     try { 
      message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); 
     } catch (Exception e) { 
      Log.d("Message", "Message is null"); 
     } 


     TextView textView = new TextView(this); 
     textView.setText(message); 
     textView.setTextSize(40); 

     RelativeLayout layout = (RelativeLayout) findViewById(R.id.content); 
     layout.addView(textView); 
    } 
} 

없는.

EDIT : EXTRA_MESSAGE가 아닌 "message"와 같은 키에 상수 이외의 다른 것을 사용하려고 시도해도 동일한 결과가 발생합니다.

+5

이동'의도 의도 = getIntent(); '내부'onCreate' 방법 –

+0

우 ... 감사. 그게 내가 C#에서하는 일에 익숙하다면, 여기서 작동하지 않을 것이라는 것을 몰랐을 것이다. 고맙습니다. –

+1

생성자가 생성되기 전에 객체가 생성 될 때 초기화 타임에 발생하는 것과 같은 메소드 외부의 모든 명령문이 있기 때문에이 함수가 작동하지 않습니다. 그 시점에서 인 텐트는 아직 객체에 전달되지 않았습니다. 정말로 간단한 값 (예 : 1,2, "hello"등)에 대해서만 이니셜 라이저를 사용하거나 새로 객체를 작성해야합니다. 함수를 호출하면 안됩니다. –

답변

1

된 setContentView() 방법

public class DisplayMessageActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_display_mesage); 

    Intent intent = getIntent(); 
    String message = ""; 

    if (intent == null) { 
     Log.d("Intent", "Intent is null :("); 
    } 

    try { 
     message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); 
    } catch (Exception e) { 
     Log.d("Message", "Message is null"); 
    } 


    TextView textView = new TextView(this); 
    textView.setText(message); 
    textView.setTextSize(40); 

    RelativeLayout layout = (RelativeLayout) findViewById(R.id.content); 
    layout.addView(textView); 
} 

} 한 후 호출해야합니다. 1) andorid의 manifest.xml 파일에서 활동을 선언하지 않은 경우. 2)에서 OnCreate 내부 getIntent를()() 메서드를 사용해야합니다, 그 일에 대한 코드가 여기에 있습니다 : -

public class DisplayMessageActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_display_mesage); 

     Intent intent = getIntent(); 


     String message = ""; 

     if (intent == null) { 
      Log.d("Intent", "Intent is null :("); 
     } 

     try { 
      message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); 
     } catch (Exception e) { 
      Log.d("Message", "Message is null"); 
     } 


     TextView textView = new TextView(this); 
     textView.setText(message); 
     textView.setTextSize(40); 

     RelativeLayout layout = (RelativeLayout) findViewById(R.id.content); 
     layout.addView(textView); 
    } 
} 
0

getIntent() 방법은 널 (null)의 두 가지 원인이 있습니다

관련 문제