0

各章に独自のタイトル、発行日、説明などがあるAndroid用のマンガアプリを作成しようとしています。各章はマンガオブジェクトに属しています。これはチャプターのコレクションであり、タイトルのリストに加えて、マンガ自体のタイトルと作者の名前が含まれます。データ自体は、さまざまな Web ページから解析されます (ただし、それは別の問題です)。

私の混乱は、クラス宣言に関するものです。(つまり、実装、拡張)

私は多くのことを試しましたが、今のところ私のコードは次のような内部クラスとして章を持つことで構成されています:

public abstract class Manga implements MangaList {
public String name;
public String author;
public int chapters;

// names of the XML tags
static final String CHANNEL = "channel";
static final String PUB_DATE = "pubDate";
static final  String DESCRIPTION = "description";
static final  String LINK = "link";
static final  String TITLE = "title";
static final  String ITEM = "item";

private final URL feedUrl;

protected Manga(String feedUrl){
    try {
        this.feedUrl = new URL(feedUrl);
    } catch (MalformedURLException e) {
        throw new RuntimeException(e);
    }
}

protected InputStream getInputStream() {
    try {
        return feedUrl.openConnection().getInputStream();
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

List<Chapter> Chapter;

public class Chapter implements Comparable<Chapter> {

    final SimpleDateFormat FORMATTER = 
            new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z");
        private String title;
        private URL link;
        private String description;
        private Date date;

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title.trim();
        }
        // getters and setters omitted for brevity 
        public URL getLink() {
            return link;
        }

        public void setLink(String link) {
            try {
                this.link = new URL(link);
            } catch (MalformedURLException e) {
                throw new RuntimeException(e);
            }
        }

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description.trim();
        }

        public String getDate() {
            return FORMATTER.format(this.date);
        }

        public void setDate(String date) {
            // pad the date if necessary
            while (!date.endsWith("00")){
                date += "0";
            }
            date = "";
            try {
                this.date = FORMATTER.parse(date.trim());
            } catch (ParseException e) {
                throw new RuntimeException(e);
            }
        }

        public Chapter copy(){
            Chapter copy = new Chapter();
            copy.title = title;
            copy.link = link;
            copy.description = description;
            copy.date = date;
            return copy;
        }

        @Override
        public String toString() {
            StringBuilder sb = new StringBuilder();
            sb.append("Title: ");
            sb.append(title);
            sb.append('\n');
            sb.append("Date: ");
            sb.append(this.getDate());
            sb.append('\n');
            sb.append("Link: ");
            sb.append(link);
            sb.append('\n');
            sb.append("Description: ");
            sb.append(description);
            return sb.toString();
        }

        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((date == null) ? 0 : date.hashCode());
            result = prime * result
                    + ((description == null) ? 0 : description.hashCode());
            result = prime * result + ((link == null) ? 0 : link.hashCode());
            result = prime * result + ((title == null) ? 0 : title.hashCode());
            return result;
        }

        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            Chapter other = (Chapter) obj;
            if (date == null) {
                if (other.date != null)
                    return false;
            } else if (!date.equals(other.date))
                return false;
            if (description == null) {
                if (other.description != null)
                    return false;
            } else if (!description.equals(other.description))
                return false;
            if (link == null) {
                if (other.link != null)
                    return false;
            } else if (!link.equals(other.link))
                return false;
            if (title == null) {
                if (other.title != null)
                    return false;
            } else if (!title.equals(other.title))
                return false;
            return true;
        }

        public int compareTo(Chapter another) {
            if (another == null) return 1;
            // sort descending, most recent first
            return another.date.compareTo(date);
        }
}

私の質問は、これが適切な形式であるかどうか、またはそれぞれが独自の章のセットを持つマンガのリストを作成する簡単な方法があるかどうかです。

編集:私はそれを調べて、解析する大量のデータを追跡するには、SQLite データベースを使用する方がはるかに簡単な方法であると判断しました。

このようにして、2 つのデータベースを維持できます。1 つは漫画のタイトルと作者用、もう 1 つは章と関連情報用です。関連チャプターは、参照 ID を介して各テーブルのマンガにリンクされます。

4

1 に答える 1

1

これを行うにはもっと簡単な方法があると思います。ただし、全体的な目標が何であるかによって異なります。これを で表示しようとしている場合は、 のlist使用を検討するかもしれませんListViewが、データを単にコンテンツとして使用している場合は、おそらくあなたが持っているものと同様のことを行うことができます。最終的には、アプリで何をしようとしているのかを理解する必要があります。そうすれば、それを実装する最も簡単な方法を見つけることができます。ただし、簡単であることが必ずしも良いとは限りません。誰がこれを維持するのか、成長するのか縮小するのか、機能を追加するのかなど、プロジェクトについて長期的に考えてみてください。

extendsおよびについてimplementsは、それぞれsubclassesおよびinterfacesであり、それに関するルールが異なります。詳細については、http: //docs.oracle.com/javase/tutorial/java/concepts/interface.htmlを参照してください。

頑張ってください!

于 2012-08-20T02:35:14.327 に答える