首页 > 解决方案 > 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;

通过按 ALT+Enter 包含 MESSAGE_WRITE 时由 android studio 自动创建。

现在,MESSAGE_WRITE 是公共的,在公共类中,并且在公共接口中使用(但您知道它也可以是私有接口/类,它不会产生影响)。如果这是纯 java,我没有问题,但 android studio 似乎不喜欢 java 访问说明符和包。为什么我不能像在 java 中那样只键入 MESSAGE_WRITE,而是必须调用它的类或导入该死的属性?

我为此发疯,请帮助我。我知道访问说明符和可见性在 java 中是如何工作的,这种情况对我来说是个谜,请证明我是个白痴,因为无法阅读或告诉我这是 android studio 的一个可怕的错误/“功能”

感谢您的时间

标签: javaandroid-studio

解决方案


在您的包装规范中,您有一个错字。您导入 msg,但包名称是 mgs。


推荐阅读