#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.