【问题标题】:how to handle a getIntent() method with java nullpointerexception如何使用 java nullpointerexception 处理 getIntent() 方法
【发布时间】:2014-01-20 14:14:34
【问题描述】:

我的应用程序中有 2 个活动,Activity1 和 Activity2。当应用程序启动时,Acitivity1 是被调用的活动。单击 Activity1 中的按钮应该采取你去Activity2。

在 Activity2 中,完成了一些数据处理,然后我使用如下意图将数据发送回 Activity1:

Intent in=new Intent(getApplicationContext(), Activity1.class);
  in.putExtra("data", data);
    startActivity(in);

然后回到Activity1我获取intent数据:

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

    String data =(getIntent().getExtras().getString("data"));

这里的问题是应用程序第一次启动它检查意图数据并且它不存在所以我得到空指针异常错误。当 Activity2 是前一个类时,我如何确保它检查意图数据?

【问题讨论】:

  • 使用startActivityForResult。你可以使用if(getIntent().getExtras()!=null)
  • getIntent().hasExtra("data"); 比if(getIntent().getExtras()!=null) 更好

标签: java android nullpointerexception


【解决方案1】:

您可以使用以下方法检查意图是否存在:

getIntent().hasExtra("data");

这将返回一个布尔值。

此外,如果 oyu 想要将一些数据返回到第一个活动,您应该以 startActivityForResult 开始第二个活动

【讨论】:

    【解决方案2】:
    if (extras != null) {
        if (extras.containsKey("data")) {
            boolean hasData = extras.getBoolean("data", false);
    
            // TODO: Do something with the value of "data".
        }
    }
    

    【讨论】:

      【解决方案3】:

      检查一下

      if(getIntent().getExtras()!=null){
      
          String data =(getIntent().getExtras().getString("data"));
      
      }
      

      【讨论】:

      • 如果您使用不同的键将数据从第三个活动传递到 MainActivity 那么getIntent().getExtras() 会为空吗?
      【解决方案4】:

      按照以下步骤操作

      1:从您的 activity1 的按钮单击调用如下

      Intent i = new Intent(this, SecondActivity.class);
      startActivityForResult(i, 1);
      

      2:在您的 Activity2 中设置您想要返回到 Activity1 的数据,如下所示,如果您不想返回,请不要设置任何内容.

      Intent returnIntent = new Intent();
       returnIntent.putExtra("result",result);
       setResult(RESULT_OK,returnIntent);     
       finish();
      

      如果您不想返回数据:

      Intent returnIntent = new Intent();
      setResult(RESULT_CANCELED, returnIntent);        
      finish();
      

      3:现在再次在您的 Activity1 中按如下方式处理返回数据

      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      
        if (requestCode == 1) {
      
           if(resultCode == RESULT_OK){      
               String result=data.getStringExtra("result");          
           }
           if (resultCode == RESULT_CANCELED) {    
               //Write your code if there's no result
           }
        }
      }
      

      编辑:

      如果你严格地想在你的问题中使用你自己的方法,试试这个:

      在您的 Activity1 中,您获得的意图数据如下: 受保护的无效 onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity1);

      String data ="default value";
      try{
         data =(getIntent().getExtras().getString("data"));
      }catch(Exception e){
      }
      

      }

      【讨论】:

      【解决方案5】:

      使用ActvityForResult。 替换这些代码。

      在 ACTVITY1:

      把这个放在onCreate之后:

      @Override
      protected void onActivityResult(int requestCode ,int resultCode ,Intent data ) {
      super.onActivityResult(requestCode, resultCode, data);
      
      String name =data.getStringExtra("data");
      if(resultCode == RESULT_OK){
          switch(requestCode){
          case 2:
              if(resultCode == RESULT_OK){
                  Toast.makeText(this, name, Toast.LENGTH_LONG).show();
              }
          }
      }
      

      在活动 2 中:

      Intent intent=new Intent();  
      intent.putExtra("data",data);  
      setResult(2,intent);  
      finish();
      

      【讨论】:

        猜你喜欢
        • 2020-08-05
        • 1970-01-01
        • 1970-01-01
        • 2011-02-18
        • 2011-08-01
        • 2011-12-23
        • 2014-03-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多