【问题标题】:Android: error when using int array passed into classAndroid:使用传递给类的int数组时出错
【发布时间】:2023-04-02 22:56:01
【问题描述】:

我正在将一个 int 数组从一个类传递到另一个类,但是当我尝试从中访问值时出现错误。不知道为什么,希望有大神指教一下?

这是调用第二个类的第一个类:

public class ConvertToGrid extends Activity{

DrawGrid v;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...code...
    int[] binArray = {Color.RED, Color.WHITE, Color.YELLOW, ...};

    v = new DrawGrid(this, binArray);
    setContentView(v);
}}

这调用了我的 DrawGrid 视图:

public class DrawGrid extends View{

private int[] binary;

public DrawGrid(Context context) {
    super(context);
}

public DrawGrid(Context context, int[] inBinary) {
    super(context);
    binary = inBinary.clone();
}

int sq00c = binary[0];
...etc}

我做错了什么以至于它无法访问这个称为二进制的 int 数组?如果我将 int 数组移动到 DrawGrid 中,它可以毫无问题地访问单元格,但是通过我的构造传递它似乎使它无法访问。如果有人问,我不能只在 DrawGrid 中定义数组,因为它是由 ConvertGrid 中的代码定义的。

也许我以错误的方式处理这个问题,并且有更好的方法来传递 int 数组?谢谢

编辑:

LogCat:

E/AndroidRuntime(12035): FATAL EXCEPTION: main
E/AndroidRuntime(12035): java.lang.RuntimeException: Unable to start activity ComponentInfo{bras2756.ox.ac.uk.colourgrid/bras2756.ox.ac.uk.colourgrid.ConvertToGrid}: java.lang.NullPointerException

【问题讨论】:

  • 显示您遇到的错误很重要。给我们 logcat 的输出。
  • 我添加了我认为是相关的 LogCat 行。
  • 那 NullPointerException 不是给你一个行号吗?
  • 将私有 int[] 二进制更改为受保护的 int[] 二进制或创建一个 getter。

标签: android arrays view android-activity int


【解决方案1】:

您不能这样做,因为您的 int sq00c = binary[0]; 类型语句在方法体之外,因此在调用构造函数之前执行,这使得 binary 数组为空。所以当你尝试访问其中的数据时,你会得到一个ArrayIndexOutOfBounds 异常。

尝试使用:

public class DrawGrid extends View{

    private int[] binary;
    private int sq00c;
    etc....

    public DrawGrid(Context context) {
        super(context);
    }

    public DrawGrid(Context context, int[] inBinary) {
        super(context);
        binary = inBinary;
        sq00c = binary[0];
        ...etc
    }
}

我将 int 声明和赋值一分为二。 int 仍然在类级别声明,但仅在调用构造函数时才被赋予一个值。

【讨论】:

  • 啊啊啊啊啊啊。又一次爆发了“全球性”疾病。我们现在需要解毒剂。这不是全局的,它是一个类级别的变量。根据定义,全局具有与应用程序相同的范围和生命周期。如果我们不关心准确和正确,那我们为什么要尝试开发软件?
  • @Simon 更好吗?对于不正确的术语,我深表歉意。完全自学,所以真的不知道该怎么称呼他们。不过我确实知道是什么。
  • 是的,+1 是一个优秀的溢出者,快速修复和自学;)(PS。我投票给你)
  • 太好了,谢谢。也自学,所以我真的很感谢奇怪的清晰解释。
【解决方案2】:

看到异常似乎是你的问题

Clone() 创建一个浅拷贝检查这个link

我认为以下修改将解决您的问题

public DrawGrid(Context context, int[] inBinary) {
super(context);
binary = inBinary; //update to this
}

【讨论】:

    猜你喜欢
    • 2017-03-29
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    相关资源
    最近更新 更多