Переписать модель Countrylist, данные и Arraylist с Java на kotlin - PullRequest
1 голос
/ 09 ноября 2019

Я переписываю свое java-приложение на kotlin, и одна вещь действительно не работает, как ожидалось, несмотря на то, что при написании и компиляции кода не было ошибок. Вместо этого я получаю ошибки во время выполнения, и это потому, что что-то сейчас правильно

  1. Это мой код Java:

A. CountryModel.java - моя модель класса

import com.appsmata.myapp.core.Searchable;

public class CountryModel implements Searchable {
    private String Country;
    private String CountryCode;
    private String IsoCode;

    public CountryModel(String country, String countryCode, String isoCode) {
        Country = country;
        CountryCode = countryCode;
        IsoCode = isoCode;
    }

    @Override
    public String getTitle() {
        return getCcode() + " | " + getCountry() + " - " + getIcode();
    }

    public String getCountry() {
        return Country;
    }

    public CountryModel setName(String country) {
        Country = country;
        return this;
    }

    public String getCcode() {
        return CountryCode;
    }

    public CountryModel setShort(String countryCode) {
        CountryCode = countryCode;
        return this;
    }

    public String getIcode() {
        return IsoCode;
    }

    public CountryModel setCode(String isoCode) {
        IsoCode = isoCode;
        return this;
    }
}

B. Country.java - это класс с образцами данных, сгенерированными во время выполнения

import com.appsmata.myapp.models.CountryModel;
import java.util.ArrayList;

public class Countries {

    public static ArrayList<CountryModel> createSampleData() {
        ArrayList<CountryModel> countries = new ArrayList<CountryModel>();
        countries.add(new CountryModel("Afghanistan", "AF", "93"));
        countries.add(new CountryModel("Albania", "AL", "355"));
        countries.add(new CountryModel("Sudan", "SD", "249"));
        countries.add(new CountryModel("Suriname", "SR", "597"));
        return countries;
    }
}

C. MainActivity.java - это место, где я показываю список стран в моем архиве

public class MainActivity extends AppCompatActivity {

    private ArrayList<CountryModel> countries;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
        countries = new ArrayList<CountryModel>(Countries.createSampleData());

    }
}
Код Kotlin: Теперь из того, что я узнал в Kotlin, я попытался переписать свой код и с помощью Android Studio

A. CountryModel.kt

import com.appsmata.myapp.core.Searchable

class CountryModel(country: String, countryCode: String, isoCode: String) : Searchable {
    var country: String? = null
        private set
    var ccode: String? = null
        private set
    var icode: String? = null
        private set

    init {
        this.country = country
        ccode = countryCode
        icode = isoCode
    }

    override fun getTitle(): String {
        return "$ccode | $country - $icode"
    }

    fun setName(country: String): CountryModel {
        this.country = country
        return this
    }

    fun setShort(countryCode: String): CountryModel {
        ccode = countryCode
        return this
    }

    fun setCode(isoCode: String): CountryModel {
        icode = isoCode
        return this
    }
}

B. Страны.КТ импорт com.appsmata.myapp.models.CountryModel

class Countries {
    fun createSampleData(): ArrayList<CountryModel> {
        val countries = ArrayList<CountryModel>()
        countries.add(new CountryModel("Afghanistan", "AF", "93"))
        countries.add(new CountryModel("Albania", "AL", "355"))
        countries.add(new CountryModel("Sudan", "SD", "249"))
        countries.add(new CountryModel("Suriname", "SR", "597"))        
        return countries
    }
}

C. MainActivity.kt

class MainActivity : AppCompatActivity() {

    private var countries: ArrayList<CountryModel>? = null
    var ctrlist: Countries? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.main_activity)
        countries = ArrayList(ctrlist!!.createSampleData())

    }
}

ошибка возникает в строке, где я заполняю массив с образцами данных

страны = ArrayList (ctrlist !!. CreateSampleData ())

Ответы [ 2 ]

2 голосов
/ 09 ноября 2019

сделайте то, что @JohnLe объяснил выше, и замените

countries = ArrayList(ctrlist!!.createSampleData())

на:

countries = ctrlist!!.createSampleData()

выходом createSampleData () является ArrayList, поэтому нет необходимости конвертировать его в ArrayListснова

1 голос
/ 09 ноября 2019

Вы должны инициализировать экземпляр Countries:

var ctrlist: Countries = Countries()
ctrlist.createSampleData()

Или вы можете поместить метод createSampleData в companion object:

class Countries {
  companion object {
    // it like static method in Java
    fun createSampleData(): ArrayList<CountryModel> {
        val countries = ArrayList<CountryModel>()
        countries.add(CountryModel("Afghanistan", "AF", "93"))
        countries.add(CountryModel("Albania", "AL", "355"))
        countries.add(CountryModel("Sudan", "SD", "249"))
        countries.add(CountryModel("Suriname", "SR", "597"))        
        return countries
    }
  }
}

И теперь выможно использовать:

Countries.createSampleData() // it like static method in Java

Обратите внимание: в Kotlin отсутствует ключевое слово new при создании нового экземпляра

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...