【问题标题】:Android Studio: error: incompatible types: MainActivity cannot be converted to ApplicationAndroid Studio:错误:不兼容的类型:MainActivity 无法转换为 Application
【发布时间】:2018-04-19 12:04:31
【问题描述】:

我在构建应用时遇到了无法解决的问题,我需要一些帮助。

我有一个简单的类 MainActivity.java 这是一个非常基本的应用程序,用于测试通过 FCB 接收推送消息。 我现在也在尝试为第三方实现一个 SDK,以发送和接收推送,这就是我卡住的地方。

这是我班级的代码:

package com.emarsys.tcspushtestapp;

import android.app.Application;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.emarsys.mobileengage.MobileEngage;
import com.emarsys.mobileengage.config.MobileEngageConfig;
import com.google.firebase.iid.FirebaseInstanceId;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

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

        Button btnShowToken = (Button)findViewById(R.id.button_show_token);
        btnShowToken.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Get the token
                String token = FirebaseInstanceId.getInstance().getToken();
                Log.d(TAG, "Token: + " + token);
                Toast.makeText(MainActivity.this, token, Toast.LENGTH_SHORT).show();
            }
        });

        MobileEngageConfig config = new MobileEngageConfig.Builder()
                .application(this)
                .credentials(String, String)
                .enableDefaultChannel("MainChannel", "Default Channel")
                //.disableDefaultChannel()
                .build();
        MobileEngage.setup(config);
    }
}

这个问题与:

.application(this) ,其中 (this) 下方有一条红色错误行,说明:

builder中的application(android.app.Application)不能应用到(com.emarsys.tcspushtestapp.MainActivity)

编译错误: 错误:不兼容的类型:MainActivity 无法转换为 Application

当我将我的类更改为扩展到 Application 而不是 AppCompatActivity 时,错误消失了,但 .onCreate、setContentView 和 findViewById 上出现了新错误。

我尝试过的其他事情是: 公共类 MainActivity 扩展 AppCompatActivity 实现 Application

然后它抱怨它期待一个应用程序的接口。

非常感谢任何帮助!

谢谢。 亲切的问候, 医学博士

【问题讨论】:

  • 你不明白什么?狗和猫是动物,但狗不是猫……
  • 您不能只将活动更改为应用程序。您需要一个单独的类来扩展应用程序。
  • 因为 .application(this) 指的是应用程序上下文而不是 Activity 上下文,所以你应该在其中使用 .application(getApplication())

标签: java android


【解决方案1】:

this 指的是 MainActivity。活动是上下文类型。 MobileEngageConfig 构建器需要您的 Application 类的实例。请改用getApplication();

编辑:您遵循的教程很可能在自定义 Application 类中使用了 builder 方法,因此他们使用 this

【讨论】:

  • 我会赞成这个,因为它包含修复,就像 Hitesh 写的一样。
【解决方案2】:

您必须将 MainActivity.this 替换为 new FlutterEngine(this);

【讨论】:

    【解决方案3】:

    Hitesh Sarsava 的帖子解决了我的问题。

    .application(getApplication()) 解决了这个问题,所以我将使用他的答案作为解决方案。

    其他人的帖子也很棒,帮助我更深入地理解了这个问题,所以谢谢大家!

    【讨论】:

      【解决方案4】:

      删除清单文件中的以下代码

      meta-data android:name="flutterEmbedding" 
      android:value="2"
      

      再次运行您的项目,它会正常工作

      【讨论】:

        【解决方案5】:

        试试这个

        类 MainActivity: FlutterActivity() {

        override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
            super.configureFlutterEngine(flutterEngine)
            GeneratedPluginRegistrant.registerWith(flutterEngine)
        }
        

        }

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-18
          • 1970-01-01
          • 2021-04-27
          • 1970-01-01
          • 2017-10-03
          • 1970-01-01
          相关资源
          最近更新 更多