java - Android:传递 Activity 类时为 "Expression expected"

标签 java android class android-activity

总的来说,我是 Android 编程和 Java 的新手,我不知道是什么导致了这个错误;据我了解,这应该可行。在下面显示的代码中(靠近第一个 fragment 的末尾),行 "ColourOutput.do_output((Activity) com.(name-removed).(app-name-removed).ColourActivity);" 在 Android Studio 1.1 中的文本 "com.(name-removed).(app-name-removed).ColourActivity" 上给出错误 "Expression expected" .0.

(这是在类 “public class ColourActivity extends Activity” 中。)

        private Camera.PreviewCallback preview_callback = new Camera.PreviewCallback() {
        @Override
        public void onPreviewFrame(byte[] data, Camera camera) {
            int width = mCamera.getParameters().getPreviewSize().width;
            int height = mCamera.getParameters().getPreviewSize().height;
            int raw_pixels[];
            int pixels[];

            raw_pixels = new int[width * height];
            pixels = new int[get_sample_width() * get_sample_height()];
            convert_yuv(raw_pixels, data, width, height);
            crop_pixels(raw_pixels, pixels, width, height, (width - get_sample_width()) / 2, (height - get_sample_height()) / 2, get_sample_width(), get_sample_height());

            if (PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getBoolean("use_mean", true) == true) {
                ColourOutput.add_colour_to_output(
                        ColourTools.get_mean(
                                pixels, get_sample_width(), get_sample_height(),
                                PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getBoolean("detect_secondary", true),
                                PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getBoolean("detect_white", true),
                                PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getBoolean("detect_brightness", true),
                                PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getInt("quantization_secondary", 32),
                                PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getInt("quantization_dark", 43),
                                PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getInt("quantization_light", 128),
                                PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getBoolean("quantization_matching_only", true)
                        ),
                        ColourOutput.ColourType.MEAN);
            }
            if (PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getBoolean("use_mode", true) == true) {
                ColourOutput.add_colour_to_output(
                        ColourTools.get_mode(
                                pixels, get_sample_width(), get_sample_height(),
                                PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getBoolean("detect_secondary", true),
                                PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getBoolean("detect_white", true),
                                PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getBoolean("detect_brightness", true),
                                PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getInt("quantization_secondary", 32),
                                PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getInt("quantization_dark", 43),
                                PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getInt("quantization_light", 128),
                                PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getBoolean("quantization_matching_only", true)
                        ),
                        ColourOutput.ColourType.MODE);
            }
            ColourOutput.do_output((Activity) com.(name-removed).(app-name-removed).ColourActivity);
        }
    };

这里是"ColourOutput.do_output"的定义:

public class ColourOutput {
    private static boolean output_clear = true;
    private static String output_buffer = "";

    public static enum ColourType {
        MEAN,
        MODE
    }

    public static void add_colour_to_output(ColourTools.ColourDescription colour, ColourType type) {
        if (output_clear == true) {
            output_buffer = colour.Brightness.toString() + " " + colour.Colour.toString();
        }
        else {
            output_buffer = output_buffer + " " + colour.Brightness.toString() + " " + colour.Colour.toString();
        }
        output_clear = false;
    }

    public static void do_output(Activity activity) {
        ((TextView) activity.findViewById(R.id.output_text)).setText(output_buffer);
        output_buffer = "";
        output_clear = true;
    }
}

最佳答案

错误消息应该是不言自明的:...ColourActivity 是一个类名,类名本身不是 Java 中的有效表达式。这不是 android 问题,这是一个简单的语法错误。

do_output() 需要一个 Activity实例。我不太确定,您通过传递 Activity 类的名称试图达到什么目的。

我假设,因为您正在从您的 Activity 内部调用 do_output(),您可能想尝试

ColourOutput.do_output(ColorActivity.this);

相反。

正如@Priya Singhal 所建议的,显式引用 ColorActivity.this 是必要的,因为您从内部类中调用该方法,而 this 指的是实例那个内部类。

关于java - Android:传递 Activity 类时为 "Expression expected",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29869191/

相关文章:

java - 如何将我的第一个程序提交到SPOJ平台?为什么我收到超出时间限制或运行时错误 NZEC?

android - 比较两个数组列表元素并获取不常见的元素

android - 为 native 应用程序构建 .apk

java - 如何将变量从主方法类转移到另一个类?

java - 检查连接 jpype - java

Java 洗牌应用程序

java - 如何为我的应用程序创建数据文件夹?

c# - 使用 C# 进行 Android 开发

Java,将参数从一个类传递到另一类

java - 确定 .class 文件是否使用调试信息编译?