intent.getextra() 正在接收 null 并且 intent.hasextra() 在第二个活动中不起作用

Posted

技术标签:

【中文标题】intent.getextra() 正在接收 null 并且 intent.hasextra() 在第二个活动中不起作用【英文标题】:intent.getextra() is receiving null and intent.hasextra() is not working in the second activity 【发布时间】:2018-11-06 20:08:37 【问题描述】:

我正在尝试使用意图将数据连续发送到另一个活动。

在第一个活动中,

MainActivity.java

class sender extends AsyncTask <void, void, void>
       
   @Override
   protected Void doInBackground(Void... params) 
   
      while(true)
      
           if(!intent.hasextra())
           
                String data = dataBuffer;
                intent.putextra(EXTRA_MESSAGE,data);  
           
       
   
    @Override
    protected void onPreExecute() 
         //  intent.putextra(EXTRA_MESSAGE,"Test data"); --> This is working 
         startActivityForResult(intent, 333);

    


SecondActivity.java

class receiver extends AyncTask <void, void, void>

    while(true)
    
         if(intent.hasextra())
          
             resultString = intent.getextra(MainActivity.EXTRA_MESSAGE);
             mHandler.obtainMessage(MESSAGE_READ,resultString 
                                             ).sendToTarget();
             intent.removExtra(MainActivity.EXTRA_MESSAGE);
          
    

在调试时,两个线程都在执行,但 while(true) 中的 if 条件不满足。

注意:在 StartActivityForResult() 之前,putExtra 正在发送数据,在 secondActivity 中我可以接收数据。

请告诉我为什么在 doInbackground() 中都没有发送和接收数据。

【问题讨论】:

dataBuffer 是否有可能变为空? 不,我检查过了,它总是有一个字符串。 【参考方案1】:

调试时,两个线程都在执行,但 if 条件 里面的while(true)不满足。

查看您发布的代码,这是因为您的两个 AsyncTask 正在同时运行,因此在接收 Asynctask 时转到 doInBackground() 它没有找到 Intent 值。您最好延迟执行第二个AsyncTask

另一方面,我强烈建议您改变您的方法,因为这将在未来导致许多问题。还有其他更好的方式在两个活动之间进行通信。

【讨论】:

我引入了延迟,但在第二个活动中仍然没有收到数据。请告诉我您对在两个活动之间进行交流的建议。

以上是关于intent.getextra() 正在接收 null 并且 intent.hasextra() 在第二个活动中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

可视代码 - 错误 NU1101:找不到包 Microsoft.EntityFrameworkCore

关于后台接收参数为null的问题之ajax--contentType

Qt-udp通信

如何在 Matlab 中为 libSVM 的 nu-SVM 使用变量而不是 nu 参数的数量?

linux提示[-f: 未找到命令

vuex