Java → Kotlin
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 1,089

退会済みユーザー
android studioで開発中のアプリをConvert Java File to Kotlin Fileで変換したところうまく動かなくなりました。
エラーが発生しているのはRetrofitで使うデータクラスの部分です。
Parcelableはプラグインを使って作成しました。
public class Word implements Parcelable {
//一部抜粋
@Expose
private Integer id;
@Expose
private String keyword;
@Expose
private Integer type;
@Expose
private Integer level;
@Expose
private String summary;
@Expose
private String description;
@Expose
private boolean nonfiction;
@Expose
private boolean fiction;
//Getter, Setterは省略
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeValue(this.id);
dest.writeString(this.keyword);
dest.writeValue(this.type);
dest.writeValue(this.level);
dest.writeString(this.summary);
dest.writeString(this.description);
dest.writeByte(this.nonfiction ? (byte) 1 : (byte) 0);
dest.writeByte(this.fiction ? (byte) 1 : (byte) 0);
}
public Word() {
}
protected Word(Parcel in) {
this.id = (Integer) in.readValue(Integer.class.getClassLoader());
this.keyword = in.readString();
this.type = (Integer) in.readValue(Integer.class.getClassLoader());
this.level = (Integer) in.readValue(Integer.class.getClassLoader());
this.summary = in.readString();
this.description = in.readString();
this.nonfiction = in.readByte() != 0;
this.fiction = in.readByte() != 0;
}
public static final Creator<Word> CREATOR = new Creator<Word>() {
@Override
public Word createFromParcel(Parcel source) {
return new Word(source);
}
@Override
public Word[] newArray(int size) {
return new Word[size];
}
};
}
これをConvert Java File to Kotlin Fileで変換すると赤波線が出ます。
上記のコードをKotlinで記述するにはどうすればいいのか教えてください。
変換後のコードは下記。
//Kotlin
class Word : Parcelable {
@Expose
var id: Int? = null
@Expose
var keyword: String? = null
@Expose
var type: Int? = null
@Expose
var level: Int? = null
@Expose
var summary: String? = null
@Expose
var description: String? = null
@Expose
var isNonfiction: Boolean = false
@Expose
var isFiction: Boolean = false
override fun describeContents(): Int {
return 0
}
override fun writeToParcel(dest: Parcel, flags: Int) {
dest.writeValue(this.id)
dest.writeString(this.keyword)
dest.writeValue(this.type)
dest.writeValue(this.level)
dest.writeString(this.summary)
dest.writeString(this.description)
dest.writeByte(if (this.isNonfiction) 1.toByte() else 0.toByte())
dest.writeByte(if (this.isFiction) 1.toByte() else 0.toByte())
}
constructor() {}
protected constructor(`in`: Parcel) {
this.id = `in`.readValue(Int::class.java.classLoader) as Int
this.keyword = `in`.readString()
this.type = `in`.readValue(Int::class.java.classLoader) as Int
this.level = `in`.readValue(Int::class.java.classLoader) as Int
this.summary = `in`.readString()
this.description = `in`.readString()
this.isNonfiction = `in`.readByte().toInt() != 0
this.isFiction = `in`.readByte().toInt() != 0
}
companion object {
@JvmField
val CREATOR: Parcelable.Creator<Word> = object : Parcelable.Creator<Word> {
override fun createFromParcel(source: Parcel): Word {
return Word(source)
}
override fun newArray(size: Int): Array<Word?> {
return arrayOfNulls(size)
}
}
}
}
エラーメッセージ
Caused by: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called CREATOR on class com.example.myapplication.Word
意味が分からなかったらすみません。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+2
何に困っているのでしょうか?
手元の環境で確認しましたが
- 上部のJavaコードを「Convert Java File to Kotlin File」で変換しても下部のKotlinコードにはなりません。
- 下部のKotlinコードはコンパイルエラーになりません(文法的に正しいです)
BadParcelableException
起こらなさそう。。
ご確認ください。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.23%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2017/03/31 11:42
ご迷惑をおかけして申し訳ありませんでした。
ありがとうございました。また機会がありましたらよろしくお願いいたします。
2017/03/31 11:43