【问题标题】:Android : When do we use getIntent()?Android:我们什么时候使用 getIntent()?
【发布时间】:2026-01-28 05:45:01
【问题描述】:

我不明白我们为什么要使用方法getIntent()

因为,当我们需要那个方法的时候,我们可以使用方法onActivityResult()

但是使用getIntent()的方法,可能会导致NullPointerException

【问题讨论】:

  • 你的意思是Activity#getIntent()

标签: android android-intent onactivityresult


【解决方案1】:

将数据发送回同一个 Activity,getIntExtra() 在我的情况下有效:

 protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

     ...

     Button reset_btn = (Button) findViewById(R.id.reset);

     reset_btn.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) { 
             Intent intent= getIntent();               
             int counter = intent.getIntExtra("Num", 0);//"Num" is the key, 0 is an initial value
             counter = counter + 1;
             Log.d("number of reset >>>>>","counter= " + String.valueOf(counter));
             intent.putExtra("Num", counter);
             finish();
             startActivity(intent);
         }
     });
 }

【讨论】:

    【解决方案2】:
      //Sending data...
      //creating and initializing an Intent object
    Intent intent = new Intent(this, NextActivity.class);
    
      //attach the key value pair using putExtra to this intent
    String user_name = "Jhon Doe";
    intent.putExtra("USER_NAME", user_name);
    
      //starting the activity
    startActivity(intent);
    
    
      //Retrieving data from intent
      //get the current intent
    Intent intent = getIntent();
    
      //get the attached extras from the intent
      //we should use the same key as we used to attach the data.
    String user_name = intent.getStringExtra("USER_NAME");
    
      //if you have used any other type of data, you should use the 
      //particular getExtra method to extract the data from Intet
    Integer user_id = intent.getIntExtra("USER_ID");
    float user_rating = intent.getFloatExtra("USER_RATING");
    
    Note: you should specify type of that before sending the value.
    

    【讨论】:

      【解决方案3】:

      实际上,当您想将一些数据从一个页面发送到另一个页面时,请使用 get 或 put Intent

      示例:

      Intent intent = new Intent(context, HomeActivity.class);
      intent.putExtra("yourData", yourData);
      

      获取数据
      Intent intent = getIntent();
      intent.getExtra("yourData")   
      

      【讨论】:

        【解决方案4】:

        getInent 用于将数据从一个活动传递到另一个活动, 例如,如果您想从一个名为 startActivity 的活动切换到另一个名为 endActivity 的活动,并且希望 startActivity 中的数据在 endActivity 中是已知的,请执行以下操作:

        startActivity:

        String dataToTransmit="this info text will be valid on endActivity";
        Intent intent =new Intent(this, endActivity.class);
        intent.putExtra("dataToTransmitKey",dataToTransmit);
        startActivity(intent);
        

        endActivity:

        Intent intent = getIntent();
        String dataTransmited=intent.getStringExtra("dataToTransmitKey");
        

        【讨论】:

          【解决方案5】:
          listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                  @Override
                  public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
          
                      Intent intent = new Intent(ItemListView.this, ViewItemClicked.class);
                      String name = itemList.get(position).getString(1);
                      String description = itemList.get(position).getString(2);
                      String something_else = itemList.get(position).getString(3);
                      intent.putExtra("name", name);
                      intent.putExtra("description", description);
                      intent.putExtra("something_else", something_else);
                      startActivity(intent);
                  }
          

          在您的详细信息活动中:

          Intent intent = getIntent();
              String name = intent.getStringExtra("name");
              String description = intent.getStringExtra("description");
              String something_else = intent.getStringExtra("something_else");
          

          现在使用字符串在所需位置显示值: 作为

          edittext.setText(name);

          【讨论】:

            【解决方案6】:

            http://developer.android.com/reference/android/app/Activity.html#getIntent()

            返回启动此活动的意图。

            如果您使用一些数据启动 Activity,例如通过做

            Intent intent = new Intent(context, SomeActivity.class);
            intent.putExtra("someKey", someData);
            

            您可以在新活动中使用 getIntent 检索此数据:

            Intent intent = getIntent();
            intent.getExtra("someKey") ...
            

            因此,它不是用于处理从 Activity 返回的数据,如 onActivityResult,而是用于将数据传递给新的 Activity。

            【讨论】:

            • 想知道我应该把getIntent()放在哪里。在 onStart?创建? Activity 主线程?
            • 无论何时何地你需要它,通常在onCreate中使用一次以提取所需的数据。但也可以在其他任何地方使用,如果数据的使用是基于一些用户交互或其他什么的。
            • 答案需要修改,因为 getExtra 方法已被其他变体取代,例如 getStringExtragetExtras(不确定 getExtra 是否存在)。