Я не могу конвертировать Java в Kotlin идеально - PullRequest
1 голос
/ 26 сентября 2019

Я новичок в Kotlin и Java.

Я строю калькулятор оценок GPA и показываю их с графиком на Android Studio с Kotlin.

Я использую hellochart lib.

Я не могу преобразовать пример из java в kotlin.

это ссылка на пример, который я пытался использовать https://www.codingdemos.com/draw-android-line-chart/?

    package com.codingdemos.codingdemos;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import java.util.ArrayList;
    import java.util.List;
    import lecho.lib.hellocharts.model.Axis;
    import lecho.lib.hellocharts.model.AxisValue;
    import lecho.lib.hellocharts.model.Line;
    import lecho.lib.hellocharts.model.LineChartData;
    import lecho.lib.hellocharts.model.PointValue;
    import lecho.lib.hellocharts.model.Viewport;
    import lecho.lib.hellocharts.view.LineChartView;
    public class MainActivity extends AppCompatActivity {
        LineChartView lineChartView;
    String[] axisData = {"Jan", "Feb", "Mar", "Apr", "May", "June", "July",
    "Aug", "Sept","Oct", "Nov", "Dec"};
    int[] yAxisData = {50, 20, 15, 30, 20, 60, 15, 40, 45, 10, 90, 18};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            lineChartView = findViewById(R.id.chart);
            List yAxisValues = new ArrayList();
            List axisValues = new ArrayList();

            Line line = new Line(yAxisValues).setColor(Color.parseColor("#9C27B0"));
    for (int i = 0; i < axisData.length; i++) {
            axisValues.add(i, new AxisValue(i).setLabel(axisData[i]));
        }

        for (int i = 0; i < yAxisData.length; i++) {
            yAxisValues.add(new PointValue(i, yAxisData[i]));
        }

        List lines = new ArrayList();
        lines.add(line);

        LineChartData data = new LineChartData();
        data.setLines(lines);

        Axis axis = new Axis();
        axis.setValues(axisValues);
        axis.setTextSize(16);
        axis.setTextColor(Color.parseColor("#03A9F4"));
        data.setAxisXBottom(axis);

        Axis yAxis = new Axis();
        yAxis.setName("Sales in millions");
        yAxis.setTextColor(Color.parseColor("#03A9F4"));
        yAxis.setTextSize(16);
        data.setAxisYLeft(yAxis);

        lineChartView.setLineChartData(data);
        Viewport viewport = new Viewport(lineChartView.getMaximumViewport());
        viewport.top = 110;
        lineChartView.setMaximumViewport(viewport);
        lineChartView.setCurrentViewport(viewport);
    }

}

Пожалуйста, помогите мне преобразовать егов Котлин без ошибок :(. Спасибо

Ответы [ 4 ]

0 голосов
/ 27 сентября 2019

Я пытался конвертировать в идиоматический Kotlin здесь-

class MainActivity : AppCompatActivity() {
    private val axisData = listOf(
        "Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"
    )
    private val yAxisData = listOf(50, 20, 15, 30, 20, 60, 15, 40, 45, 10, 90, 18)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val lineChartView = findViewById(R.id.chart)

        val axisValues = axisData.mapIndexed { i, data -> AxisValue(i).setLabel(data) }
        val yAxisValues = yAxisData.mapIndexed { i, data -> PointValue(i, data) }

        val line = Line(yAxisValues).setColor(Color.parseColor("#9C27B0"))
        val lines = listOf(line)

        val data = LineChartData()
        data.setLines(lines)

        val axis = Axis().apply {
            setValues(axisValues)
            setTextSize(16)
            setTextColor(Color.parseColor("#03A9F4"))
        }
        data.setAxisXBottom(axis)

        val yAxis = Axis().apply {
            setName("Sales in millions")
            setTextColor(Color.parseColor("#03A9F4"))
            setTextSize(16)
        }
        data.setAxisYLeft(yAxis)

        lineChartView.setLineChartData(data)
        val viewport = Viewport(lineChartView.getMaximumViewport())
        viewport.top = 110
        lineChartView.setMaximumViewport(viewport)
        lineChartView.setCurrentViewport(viewport)
    }
}
0 голосов
/ 27 сентября 2019

Мы можем легко конвертировать Java-проект в Kotlin. Выполните следующие действия

Конвертируйте один Java-файл в Kotlin

откройте Java-класс / выберите из проекта> Goна панель инструментов> нажмите «Код»> выберите «Преобразовать Java-файл в файл Kotlin»

Преобразовать Java-проект в Kotlin

Выберите боковое меню формы приложения (см. на снимке экрана)> Перейти к панели инструментов> Нажмите на код> Выбрать Преобразовать Java-файл в файл Kotlin

Клавиша быстрого доступа: Ctrl + Alt + Shift + K

Некоторое время в файле kotlin показывается какая-то ошибка, чтобы устранить эту ошибку, нажмите на строку ошибки и нажмите Alt + Enter , чтобы отобразить сообщение об ошибке с подсказками разрешения Convert Single java file to kotlin Convert java project into kotlin

0 голосов
/ 27 сентября 2019

Обычно я привык конвертировать код JAVA в kotlin, используя this

Выберите конвертирование из Java (в верхнем правом углу)

, используя эту MainActivity, какэто.

package com.codingdemos.codingdemos
import android.graphics.Color
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import java.util.ArrayList
import lecho.lib.hellocharts.model.Axis
import lecho.lib.hellocharts.model.AxisValue
import lecho.lib.hellocharts.model.Line
import lecho.lib.hellocharts.model.LineChartData
import lecho.lib.hellocharts.model.PointValue
import lecho.lib.hellocharts.model.Viewport
import lecho.lib.hellocharts.view.LineChartView
class MainActivity:AppCompatActivity() {
  internal var lineChartView:LineChartView
  internal var axisData = arrayOf<String>("Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec")
  internal var yAxisData = intArrayOf(50, 20, 15, 30, 20, 60, 15, 40, 45, 10, 90, 18)
  protected fun onCreate(savedInstanceState:Bundle) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    lineChartView = findViewById(R.id.chart)
    val yAxisValues = ArrayList()
    val axisValues = ArrayList()
    val line = Line(yAxisValues).setColor(Color.parseColor("#9C27B0"))
    for (i in axisData.indices)
    {
      axisValues.add(i, AxisValue(i).setLabel(axisData[i]))
    }
    for (i in yAxisData.indices)
    {
      yAxisValues.add(PointValue(i, yAxisData[i]))
    }
    val lines = ArrayList()
    lines.add(line)
    val data = LineChartData()
    data.setLines(lines)
    val axis = Axis()
    axis.setValues(axisValues)
    axis.setTextSize(16)
    axis.setTextColor(Color.parseColor("#03A9F4"))
    data.setAxisXBottom(axis)
    val yAxis = Axis()
    yAxis.setName("Sales in millions")
    yAxis.setTextColor(Color.parseColor("#03A9F4"))
    yAxis.setTextSize(16)
    data.setAxisYLeft(yAxis)
    lineChartView.setLineChartData(data)
    val viewport = Viewport(lineChartView.getMaximumViewport())
    viewport.top = 110
    lineChartView.setMaximumViewport(viewport)
    lineChartView.setCurrentViewport(viewport)
  }
}
0 голосов
/ 26 сентября 2019

Попробуйте этот код .. Надеюсь, он работает для вас

class MainActivity : AppCompatActivity() {
 private var axisData: Array<String> = arrayOf(
    "Jan",
    "Feb",
    "Mar",
    "Apr",
    "May",
    "June",
    "July",
    "Aug",
    "Sept",
    "Oct",
    "Nov",
    "Dec"
)
 private var yAxisData: IntArray = intArrayOf(50, 20, 15, 30, 20, 60, 15, 40, 45, 10, 90, 18)
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    val yAxisValues:ArrayList<PointValue> = ArrayList()
    val axisValues:ArrayList<AxisValue> = ArrayList()

    val line = Line(yAxisValues).setColor(Color.parseColor("#9C27B0"))
    for (i in axisData.indices) {
        axisValues.add(i, AxisValue(i.toFloat()).setLabel(axisData[i]))
    }

    for (i in yAxisData.indices) {
        yAxisValues.add(PointValue(i.toFloat(), yAxisData[i].toFloat()))
    }

    val lines:ArrayList<Line> = ArrayList()
    lines.add(line)

    val data = LineChartData()
    data.lines = lines

    val axis = Axis()
    axis.values = axisValues
    axis.textSize = 16
    axis.textColor = Color.parseColor("#03A9F4")
    data.axisXBottom = axis

    val yAxis = Axis()
    yAxis.name = "Sales in millions"
    yAxis.textColor = Color.parseColor("#03A9F4")
    yAxis.textSize = 16
    data.axisYLeft = yAxis

    chart.lineChartData = data
    val viewport = Viewport(chart.maximumViewport)
    viewport.top = 110f
    chart.maximumViewport = viewport
    chart.currentViewport = viewport
}
}
...