Проблема с Android studio и общедоступными классами / атрибутами

#java #android-studio

#java #android-studio

Вопрос:

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

Это общедоступный класс для тех методов / атрибутов, которые мне нужны в разных действиях или файлах Java:

 package com.mgs.bchat;

import android.content.Context;
import android.widget.Toast;

public class Util {
    public static final String LOG_TAG = "BChat MSG";
    public static final String SP_NAME = "BChatSharedPreferences";
    public static final String SAVED_NICKNAME = "BChatSPSavedNickname";
    public static final String INTENT_PARCELABLE = "BChatParcelableGeneric";
    public static final String INTENT_DEVICE_NAME = "BChatParcelableName";
    public static final String INTENT_DEVICE_MAC = "BChatParcelableMac";

    public static final int MESSAGE_STATE_CHANGE = 1;
    public static final int MESSAGE_READ = 2;
    public static final int MESSAGE_WRITE = 3;
    public static final int MESSAGE_DEVICE = 4;
    public static final int MESSAGE_TOAST = 5;
    public static final String DEVICE = "device_name";

    public static void SimpleToast(Context context, String msg)
    {
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
    }

}
 

Это вызов одной из этих переменных-членов

 package com.mgs.bchat;

import android.os.Handler;
import android.os.Handler.Callback;
import android.os.Message;
import android.view.View;
import android.widget.Toast;

import com.msg.bchat.Util;

import androidx.coordinatorlayout.widget.CoordinatorLayout;

import static com.mgs.bchat.Util.MESSAGE_WRITE;

public interface ChatHandler extends Handler.Callback {
    @Override
    public boolean handleMessage( Message message) {
        switch (message.what){
            case Util.MESSAGE_STATE_CHANGE:
                switch (message.arg1){
                    case ChatController.STATE_CONNECTED:
                        setStatus(getString(R.string.stateConnected)  connectingDevice.getName());
                        break;
 
                       .
                       .
                       .
    
    }
}
 

Я должен либо использовать нотацию class.attr, либо выполнить импорт для каждого атрибута, как показано выше

 import static com.mgs.bchat.Util.MESSAGE_WRITE;
 

автоматически создается android studio при включении MESSAGE_WRITE нажатием ALT Enter.

Теперь MESSAGE_WRITE является общедоступным в общедоступном классе и используется в общедоступном интерфейсе (но вы знаете, что это может быть и частный интерфейс / класс, это ничего не изменит). Если бы это была обычная java, у меня не было бы никаких проблем, но android studio, похоже, не нравится спецификатор доступа java и пакеты. Почему я не могу просто ввести MESSAGE_WRITE, как я бы сделал в java, но вместо этого я должен вспомнить его класс или импортировать чертов атрибут?

Я схожу с ума от этого, пожалуйста, помогите мне. Я знаю, как спецификатор доступа и видимость работают в Java, и этот случай для меня загадка, пожалуйста, докажите мне, что я идиот, потому что не могу прочитать или сказать мне, что это долбаная ошибка / «особенность» android studio

Спасибо за ваше время

Ответ №1:

В вашей спецификации пакета у вас опечатка. Вы импортируете сообщение, но имя пакета — mgs.

Комментарии:

1. С помощью: import static com.mgs.bchat.util.*; я могу использовать статические атрибуты. Я чувствую себя глупо из-за того, что не пробовал этого раньше (возможно, я использовал static, но я допустил несколько других ошибок). Большое вам спасибо

2. @samuele55598 вы можете принять ответ, если он вам помог. Рядом с ним находится знак Vi.