【问题标题】:getIntent returning nullgetIntent 返回 null
【发布时间】:2016-07-04 00:11:22
【问题描述】:

在 android 中,当我尝试使用 getIntent(); android中的方法,它返回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);
    }
}

第一个活动调用第二个:

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

我不明白为什么它返回 null,因为我自己调用它的意图是……不为 null。

编辑:我还尝试对键使用常量而不是常量,例如“消息”,而不是 EXTRA_MESSAGE,它会导致相同的结果。

【问题讨论】:

  • Intent intent = getIntent(); 移动到onCreate 方法中
  • 哦...谢谢。那是我以前在 C# 中做的事情,不知道它在这里行不通。非常感谢。
  • 它在那里不起作用,因为这样的方法之外的任何语句都发生在初始化时——创建对象时,在调用构造函数之前。那时,还没有将 Intent 传递给对象。真的,您应该只对简单值(如 1,2、“hello”等)使用类似的初始化程序或使用 new 创建对象。你不应该调用函数。

标签: java android


【解决方案1】:

null 有两个原因。 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);
    }
}   

【讨论】:

    【解决方案2】:

    getIntent() 方法必须在 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);
    }
    

    }

    【讨论】:

    • 为什么必须在 setContentView() 之后调用 getIntent()?
    • 哦,所以你可以findViewById()!我很确定你可以在那之前得到意图。
    猜你喜欢
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    相关资源
    最近更新 更多