【问题标题】:Call Function in Java [closed]Java中的调用函数[关闭]
【发布时间】:2013-08-29 08:04:09
【问题描述】:

我是 Java 初学者。

你知道这有什么问题吗?

我有 ActivityToSmartWatch 类

public class ActivityToSmartWatch extends BaseAdapter {

private Activity activity;
private ArrayList<String[]> data;
private static LayoutInflater inflater = null;
public String[] inkLevels = new String[5];
public final static String EXTRA_MESSAGE = "com.PrinterStatus.AppLab.MESSAGE";



public ActivityToSmartWatch(Activity a, ArrayList<String[]> inkLevels) {
    activity = a;
    data = inkLevels;
    inflater = (LayoutInflater) activity
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

在里面我有 GetInkLevel 类

public String[] getInkLevel (String [] inkLevels, int position)
    {

        for (int i= 0; i <data.size(); i++)
        {
            System.arraycopy(data.get(position), 0, inkLevels, 0, data.get(position).length);

        }
        return inkLevels;
}

在另一个班级我想这样称呼它

 ActivityToSmartWatch A2SSW = new ActivityToSmartWatch(activity, data);
 A2SSW.getInkLevel(inkLevels, position);

我知道那是错的,你知道我犯了什么错误吗?

【问题讨论】:

  • 您是否收到了特定的错误消息?乍一看,这个实现看起来还不错。
  • I know that is wrong - 你怎么知道?例外?
  • 您将什么作为参数传递给方法 getInkLevel() 参数?
  • 如果它的android特定标签带有android,则发布logcat
  • 这不是 arrayCopy 的工作方式。 (顺便说一下,在这种情况下你不需要)

标签: java android function android-listview


【解决方案1】:

A2SSWActivityToSmartWatch 的一个实例,所以它没有getInkLevel。您需要获取GetInkLevel 类来调用它的方法。您的 IDE 很可能会以某种方式通知您该方法不可用。

您能否提供完整的ActivityToSmartWatch 课程。

编辑:

您是否使用inkLevels 数组来表示原色和黑色?可能值得创建一个pojo 类:

public class InkCartridge {
    private int red;
    private int green;
    private int blue;
    private int black;

    public int getRed() {
        return red;
    }

    public void setRed(final int red) {
        this.red = red;
    }

    public int getGreen() {
        return green;
    }

    public void setGreen(final int green) {
        this.green = green;
    }

    public int getBlue() {
        return blue;
    }

    public void setBlue(final int blue) {
        this.blue = blue;
    }

    public int getBlack() {
        return black;
    }

    public void setBlack(final int black) {
        this.black = black;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("InkCartridge{");
        sb.append("red=").append(red);
        sb.append(", green=").append(green);
        sb.append(", blue=").append(blue);
        sb.append(", black=").append(black);
        sb.append('}');
        return sb.toString();
    }
}

与其使用ArrayList&lt;String[]&gt;,不如使用List&lt;List&lt;String&gt;&gt;。使用列表通常更好。如果inkLevels 是一个列表,您可以轻松地做类似inkLevels.get(index); 的方便操作,这似乎是您的getInkLevel 根据方法名称应该做的事情。在这个主题上,值得一提的是,您应该遵守已知的命名约定。变量和方法应始终以小写字符开头,如果您打算返回一个数组,那么您的方法应称为 getInkLevels 而不是 getInkLevel。仅仅因为它编译并不能使它成为好的代码。 This book 是任何开发者的必读之书。

在 for 循环中使用这种方式更简洁:for(Type item : collection) { 所以如果你有一个字符串列表的列表,你会使用for(List&lt;String&gt; list : data) {

【讨论】:

  • 哎呀。错过了 GetInkLevel 本身就是一个类的观点。当场。
  • 基于构造函数和实例变量,getInkLevel确实是ActivityToSmartWatch的方法,OP只是在问题中写了类而不是方法。如果GetInkLevel 是它自己的类,那么ActivityToSmartWatch 的构造函数将毫无意义。因此,您的答案可能完全错误。
  • 你说得对,我正在查看代码,因为它声明有一个 GetInkLevel 的内部类。再看一遍,他的问题似乎是他调用了该方法,但没有对返回的值做任何事情。 String[] inkLevels = A2SSW.getInkLevel(inkLevels, position); 很难说这是一个措辞不当的问题
【解决方案2】:

试试这个:

ActivityToSmartWatch A2SSW = new ActivityToSmartWatch(activity, data);
String[] inkLevels = new String[];
inkLevels = A2SSW.getInkLevel(inkLevels, position);

您创建了一个字符串数组,但 getInklevel 返回一个字符串数组。 希望这有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 2018-08-10
    • 2012-11-26
    • 1970-01-01
    相关资源
    最近更新 更多