Android Studio: ошибка: несовместимые типы: MainActivity не может быть преобразован в приложение

У меня проблема с созданием приложения, которую я не могу решить, и мне нужна помощь.

У меня простой класс MainActivity.java Это очень простое приложение для тестирования получения push-сообщений через FCB. Теперь я также пытаюсь реализовать SDK для третьей стороны, чтобы отправлять и получать Push through, и именно здесь я застреваю.

Вот код моего класса:

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) имеет красную строку ошибки под ним, в которой говорится:

приложение (android.app.Application) в построителе не может быть применено к (com.emarsys.tcspushtestapp.MainActivity)

Ошибка компиляции: ошибка: несовместимые типы: MainActivity не может быть преобразован в приложение

Когда я изменяю свой класс для расширения на Application, вместо AppCompatActivity, ошибка исчезает, но появляются новые ошибки в файлах .onCreate, setContentView и findViewById.

Другие вещи, которые я пробовал: открытый класс MainActivity расширяет AppCompatActivity реализует приложение

Затем он жалуется, что ожидает интерфейс для приложения.

Любая помощь очень ценится!

Спасибо. С уважением, Доктор медицины

Что ты не понял? Собаки и кошки - животные, но собака - не кошка ...

Selvin 19.04.2018 14:08

проверьте образец android-mobile-engage-sample-app

AskNilesh 19.04.2018 14:09

вы не можете просто изменить действие на приложение. Для этого вам нужен отдельный класс, который расширяет приложение.

Vladyslav Matviienko 19.04.2018 14:10

потому что .application (this) относится к контексту приложения, а не к контексту действия, поэтому вы должны использовать .application (getApplication ()) в этом

Hitesh Sarsava 19.04.2018 14:11
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
6 491
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

this относится к MainActivity. Действие имеет тип Context. Конструктору MobileEngageConfig нужен экземпляр вашего класса Application. Вместо этого используйте getApplication();

edit: в учебнике, которому вы следовали, скорее всего, использовался метод построения в пользовательском классе приложения, поэтому они использовали this.

Я буду поддерживать его, так как он содержит исправление, как писал Хитеш.

Linkfish 21.04.2018 11:05

Сообщение Хитеша Сарсавы устранило мою проблему.

.application (getApplication ()) решил проблему, поэтому я буду использовать его ответ в качестве решения.

Посты всех остальных тоже были отличными и помогли мне глубже разобраться в проблеме, так что спасибо всем!

вы должны заменить MainActivity.this на новый FlutterEngine (this);

Удалите приведенный ниже код в файле манифеста

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

запустите свой проект еще раз, он будет работать нормально

попробуйте использовать это

class MainActivity: FlutterActivity () {

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

}

Другие вопросы по теме