当前位置: 首页 > 知识库问答 >
问题:

为什么上下文为空?

云瑞
2023-03-14

我试图通过使用默认的SMS应用程序实现发送SMS的代码,但我得到了空上下文,我不明白为什么。

代码位于MainActivity.java中

public void sendSMS(String msg)
{
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) // At least KitKat
    {
        String defaultSmsPackageName = Telephony.Sms.getDefaultSmsPackage(this); //<---Line 107 --- Need to change the build to API 19

        Intent sendIntent = new Intent(Intent.ACTION_SEND);
        sendIntent.setType("text/plain");
        sendIntent.putExtra(Intent.EXTRA_TEXT, msg);

        if (defaultSmsPackageName != null)// Can be null in case that there is no default, then the user would be able to choose
        // any app that support this intent.
        {
            sendIntent.setPackage(defaultSmsPackageName);
        }
        startActivity(sendIntent);
    }
    else // For early versions, do what worked for you before.
    {
        Intent smsIntent = new Intent(Intent.ACTION_VIEW);
        smsIntent.setType("vnd.android-dir/mms-sms");
        smsIntent.putExtra("address", SMSParameters.getTelefono(this));
        smsIntent.putExtra("sms_body",msg);
        startActivity(smsIntent);

    }
}

HomeFragment类的一部分

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) 
{
    View view = inflater.inflate(R.layout.fragment_home, container, false);

    final Button buttonAusente = view.findViewById(R.id.button_ausente);
    buttonAusente.setOnClickListener(new View.OnClickListener()
    {

        public void onClick(View view)
        {
            String message = null;

                //enviarComando AUSENTE

                //Line 70 below
            message = MessageGenerator.getMessageAusente(_password, _id, SMSParameters.getSecuencia(getContext())); //<-- Line 70
            new MainActivity().sendSMS(message);

        }
    });

    final Button buttonDesactivar = view.findViewById(R.id.button_desactivar);
    buttonDesactivar.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view)
        {
            String message = null;
           //enviarComando DESACTIVAR
            message = MessageGenerator.getMessageDesactivar(_password, _id, SMSParameters.getSecuencia(getContext()));
            new MainActivity().sendSMS(message);

        }
    });

    final Button buttonPresente = view.findViewById(R.id.button_presente);
    buttonPresente.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View view)
        {
            String message = null;

               // enviarComando PRESENTE
            message = MessageGenerator.getMessagePresente(_password, _id, SMSParameters.getSecuencia(getContext()));
            new MainActivity().sendSMS(message);
        }
    });

    final Button buttonPanico = view.findViewById(R.id.button_panico);
    buttonPanico.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View view)
        {
            String message = null;

            //  enviarComando(Comandos.PANICO);
            message = MessageGenerator.getMessagePanico(_password, _id, SMSParameters.getSecuencia(getContext()));
            new MainActivity().sendSMS(message);

        }
    });

    setStatusIcon(getContext(), Comandos.AUSENTE, view);
    setStatusIcon(getContext(), Comandos.DESACTIVAR, view);
    setStatusIcon(getContext(), Comandos.PRESENTE, view);
    setStatusIcon(getContext(), Comandos.PANICO, view);

    saveViewStatus(view);

    return view;
}

共有1个答案

阎庆
2023-03-14

新的MainActivity().sendsms(message);-这不起作用。首先,您不是通过活动的构造函数来实例化活动,而是使用意图来实例化活动;其次,因为您不想创建新活动,而是要访问片段当前附加到的活动。

为了与您的片段中的宿主活动进行通信,您可以在这里看到我的答案(参见方法2和3)以及这个示例项目。Android文档中也概述了这些技术。

 类似资料:
  • 问题内容: 我有一个关于片段中上下文使用情况的问题。我的问题是,我总是收到NullpointerException。这是我的工作: 创建一个扩展SherlockFragment的类。在该类中,我有另一个Helper类的实例: 这是其他Helper类的摘录: 每次调用时(例如context.getResources()),我都会收到NullPointerException。这是为什么? 问题答案:

  • 似乎自从我们将tomcat升级到Version8+后,我们在启动时就会重新加载上下文。然而,这似乎只发生在我们的开发环境中(带有eclipse和Tomcat8.5的windows OS)。我们的生产环境(带有Tomcat8.5的linux OS)不存在此问题。我把它贴在下面,但我没有看到任何迹象表明为什么会发生这样的tomcat日志。我知道这是正常的行为,在web应用程序目录中的一些东西被改变,但

  • 问题内容: 是否有评估为假的原因?还是只是成功时返回0的C约定起作用? 问题答案: 大多数更改容器就位返回值的Python方法- 命令-查询分离原理的应用。(Python总是很务实,所以一些变数在获取它时确实会返回一个可用的值,否则会很昂贵或一团糟-该方法是这种实用主义的一个很好的例子-但是这些绝对是例外,不是规则,并且没有理由append例外)。

  • 同时,Puppy资源将更多地位于webMvc级别,并加载到DispatcherServlet的上下文中。 从我刚才读到的内容(现在我很有希望理解)来看,根上下文实际上是DispatcherServlet创建的上下文的‘父’上下文。这意味着根上下文中的bean实际上可以自动连接/注入到DispatcherServlet创建的上下文中的任何bean中。我只是了解了“嵌套”上下文的概念。这准确吗? 如果

  • 问题内容: 在Spring MVC中,有两个上下文。一种是由引导的应用程序上下文或全局上下文。它采用参数中提到的所有配置文件。 现在,如果您还使用Spring MVC,则需要Dispatcher Servlet,它会启动另一个容器,该容器也称为Web应用程序容器。该容器将全局容器作为父容器。 将struts1与spring集成时,只有一个上下文。Spring MVC为什么需要两个?使用spring

  • 我的源XML文档 根据元素内容的模式,在元素中的元素中,我希望添加一个新的元素。元素是前导信息。因此,首先,我必须创建一个新的元素及其和内容。之后,我必须创建一个相应的元素,该元素具有相同的内容和特定的内容。 这是我的目标XML文档的示例(添加param03): 我的XSLT文档 结果XML文档错误 我遇到的问题: > 使用不会按预期更改节点上下文。新的元素将在最后一个位置添加到元素中,而不是按照

  • 问题内容: 我在Windows 7计算机上安装了WampServer 2。我正在使用Apache 2.2.11和PHP 5.2.11。当我尝试从表单上传任何文件时,似乎都在上传,但是在PHP中,数组为空。文件夹中没有文件。我已配置为允许文件上传等。该文件夹具有当前用户的读/写特权。我很沮丧 HTML: PHP: 问题答案: 谢谢大家的全面答复。这些都非常有帮助。答案很奇怪。事实证明,PHP 5.2

  • 问题内容: 我对Java中的匿名类有什么误解。考虑以下简单示例: 演示 为什么要编译代码?在JLS,CHAPT 15 说: 匿名类始终是内部类(第8.1.3节);它永远不会是静态的 但是JLS,第8章 内部类是未显式或隐式声明为static的嵌套类。 因此,匿名类是内部类。但是我们在静态上下文中使用它们。为什么这里正确? 问题答案: 可以在静态上下文中创建类而无需将其声明为静态,这就是在这里发生的