0

我编写了一个程序,可以在 Eclipse 的控制台和 Linux 的终端窗口中工作。我现在正在将它转换为一个 Android 应用程序,并且我已经完成了 Android UI 的基本功能,直到它需要使用我编写的程序的 Java 文件中的逻辑。我所有来自 Java 文件的输入当前都来自键盘(来自扫描仪)。

我的问题是:如何转换它以使其与应用程序的用户交互一起使用?

唯一的输入将来自内置的NumberPicker. Java文件从main方法开始public static void main(String[] args) {:)

例如:

示例安卓代码:

public class Source1 extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.source1_layout);
        Intent intent = getIntent();
        int pickerValue = intent.getIntExtra("numEntered", 0);
}

来自程序 (Test.java) 的示例 Java 代码:

public class Test {

    public static void main(String[] args) {

    System.out.println("Enter number: ");
    Scanner reader = new Scanner(System.in);
    int num = reader.nextInt();
    ...
    }
}

如何传入类pickerValue的main方法Test(启动main方法的逻辑)?我想要num = pickerValue;在 main 方法中(替换Scanner)。这是怎么做到的?

另外,我拥有的打印语句是否会System.out.println(...);直接转换为 Android UI 并打印在屏幕上,还是我必须修改这些语句?

4

2 回答 2

1

您应该尝试将 UI 与逻辑分开。根据您实际收集输入的部分的输入提取您正在计算的部分。这样,逻辑方法(或类)可以与多种输入收集方法一起重用。

例如,Calculator 类不应具有以下方法:

/**
 * asks for two numbers A and B, reads them from the keyboard, and displays the result 
 * of A^B on the screen
 */
public void power() {...}

/**
 * asks for a number A, reads it from the keyboard, and displays the square root
 * of A on the screen
 */
public void squareRoot() {...}

相反,它应该分为两类:

public class Calculator {
    /**
     * returns a^b
     */
    public double power(double a, double b) {...}

    /**
     * returns the square root of a
     */
    public double squareRoot(double a) {...}
}

public class ConsoleCalculator {
    private Calculator calculator;

    public ConsoleCalculator(Calculator calculator) {
        this.calculator = calculator;
    }

    /**
     * asks for two numbers A and B, reads them from the keyboard, uses
     * the calculator to compute A^B, and displays the result on the screen
     */
    public void power() {...}

    /**
     * asks for a number A, reads it from the keyboard, uses the calculator to
     * compute the square root of A and displays the result on the screen
     */
    public void squareRoot() {...}
}

这样,很容易构建一个 AndroidCalculator,因为核心的数学逻辑被封装在一个 Calculator 类中,它不关心输入来自哪里。

于 2012-12-02T23:02:29.037 回答
1

您必须重新编写 Java 逻辑才能被 Android 框架理解。根据您的应用程序的复杂性,这可能会也可能不会容易做到。

例如,使用您发布的测试类

Sample Java Code from program:

public class Test {

public static void main(String[] args) {

System.out.println("Enter number: ");
Scanner reader = new Scanner(System.in);
int num = reader.nextInt();
...
}
}

这很容易变成

public class Source1 extends Activity {

TextView number;
 EditText enterText;
 String result;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.source1_layout);

//inflate your components from XML
result = (TextView)findViewById(R.id.resultId);
enterText = (EditText)findViewById(R.id.enterTextId);

//Get the value from the user
//print it to the screen
String userWrites = enterText.getText().toString();
result.setText(userWrites);

}

你似乎走在正确的轨道上。希望这可以帮助

于 2012-12-03T02:17:46.740 回答