Project Rss Reader Full Souce-

quyduc1412

New Member
23/4/13
7
1
3
25
Chào cả nhà. Lần đâu tiên post bài không biết post vào đây có đúng không. Mình vừa mới làm xong project đọc tin RSS xong post lên đây cho mọi người chém nhiệt tình hộ mình . Thanks mọi người nhiều.
Link down full source : http://www.mediafire.com/?r2r1xmwx0xpx35b ****
- Đây là ảnh giao diện của nó :

*Mình xin giới thiệu các chức năng của nó:
- Chương trình chỉ đơn giản là đọc file rss và tự động cập nhật các tin tức.
- Đầu tiên bạn sẽ thêm 1 rss bằng cách nhập địa chỉ của nó vào texfield "Url Of Rss" và nhập add. Nếu nó đúng định dạng file rss thì chương trình sẽ download về và hiển thị Title vào mục đọc.
- Trong lúc đọc bạn có thể đến link liên kết với các brower. Và có thể thiết lập brower trong mục config.
- Chương trình sẽ tự động cập nhập các RSS, bạn có thể thiết lập time tại mục config. Hoặc có thể lập tực cập nhập = cách nhấn button refresh.
* Lần đâu post bài, mong các bạn góp ý và cùng nhau thảo luận, có vấn đề gì bạn có thể reply và mình sẽ trả lời .
Thanks các bạn nhiều. Rất mong nhận được nhiều ý kiến của các bạn :D
 

Attachments

  • Like
Reactions: LTV

JackV

Administrator
Staff member
Hình như post nhầm box. ADMIN chuyển về đúng box giúp mình với. :(
Để đây cũng đúng rồi, bạn share project mà. Quan trọng là có ai đó hiểu vấn đề, thích nó và có thời gian sẽ trao đổi với bạn.

===
Mới dùng thử thì thấy phần mềm này có đầu tư cả những chức năng nhỏ hỗ trợ người dùng, ví dụ lấy dữ liệu trong clipboard khi người dùng mở khung add.

Nhưng chưa sử dụng được, mởi lên không thấy rss mặc định nào cả, add
http://congdongjava.com/forum/forums/congdongjava-members-java-software.96/index.rss
>> Chương trình không load được nội dung.

Ô search để sau ô nhập link rss để add cảm thấy bất hợp lý, lúc mới nhìn vào tưởng là search gì liên quan đến link hay là tìm link rss trên google ?

Nói chung là cảm thấy URL of RSS đặt ở đó không khoa học.
 

quyduc1412

New Member
23/4/13
7
1
3
25
OK
Để đây cũng đúng rồi, bạn share project mà. Quan trọng là có ai đó hiểu vấn đề, thích nó và có thời gian sẽ trao đổi với bạn.

===
Mới dùng thử thì thấy phần mềm này có đầu tư cả những chức năng nhỏ hỗ trợ người dùng, ví dụ lấy dữ liệu trong clipboard khi người dùng mở khung add.

Nhưng chưa sử dụng được, mởi lên không thấy rss mặc định nào cả, add
http://congdongjava.com/forum/forums/congdongjava-members-java-software.96/index.rss
>> Chương trình không load được nội dung.

Ô search để sau ô nhập link rss để add cảm thấy bất hợp lý, lúc mới nhìn vào tưởng là search gì liên quan đến link hay là tìm link rss trên google ?

Nói chung là cảm thấy URL of RSS đặt ở đó không khoa học.
Oke em đã tìm ra lỗi rồi. Lỗi là bị null do 1 số bài viết ở diển đàn mình không có nội dung (hầu hết đều không chứa thẻ description)- > khi đọc lên = xml thì nó bị lỗi. Em chỉ xử lí lỗi ở phần Author thì phần này có nhiều trang RSS bị null . Giờ em xử lí hết thì oke. Xin được upload lên lại . Thanks ad vì đã góp ý :D
 

Joe

Thành viên VIP
21/1/13
2,697
1,245
113
Quyduc,
it isn't my intention to criticize your work because I haven't time to scrutinize all the codes. However, I have a glance at the DownLoadTread.java and I get a headache. Reasons:
a) Thread means concurrent processing. Also more that 2 downloads could happen
b) No synchronization is made if the downloads share the same output...
c) URLConnection delivers an InputStream. In some cases (rarely, but could happen) the data stream is chunked and your thread runs deeply into troubles. More:
http://en.wikipedia.org/wiki/Chunked_transfer_encoding
 

quyduc1412

New Member
23/4/13
7
1
3
25
Quyduc,
it isn't my intention to criticize your work because I haven't time to scrutinize all the codes. However, I have a glance at the DownLoadTread.java and I get a headache. Reasons:
a) Thread means concurrent processing. Also more that 2 downloads could happen
b) No synchronization is made if the downloads share the same output...
c) URLConnection delivers an InputStream. In some cases (rarely, but could happen) the data stream is chunked and your thread runs deeply into troubles. More:
http://en.wikipedia.org/wiki/Chunked_transfer_encoding
I programmed java for like 3 or 4 months so my codes are probably suck :D. I need more advices like yours to impove myself.
Thank you for your advice.
 

Joe

Thành viên VIP
21/1/13
2,697
1,245
113
quyduc,
problem is I don't use IDE (netbeans or eclipse or whatever) except Jedit (Windows) oremacs (Linux) and your codes are too abundant so that I reluctantly download the whole package and de-project them before I could run your app as a whole. Anyway, I've posted here an API ChunkedInputStream (use the search function with this keyword to find it). If you so will I could tell you where and how to optimize, to synchronize your codes. But you have to post it/them here.
 

quyduc1412

New Member
23/4/13
7
1
3
25
quyduc,
problem is I don't use IDE (netbeans or eclipse or whatever) except Jedit (Windows) oremacs (Linux) and your codes are too abundant so that I reluctantly download the whole package and de-project them before I could run your app as a whole. Anyway, I've posted here an API ChunkedInputStream (use the search function with this keyword to find it). If you so will I could tell you where and how to optimize, to synchronize your codes. But you have to post it/them here.
Sorry im not sure i followed you. What exactly am i doing wrong here and what should i do so that you could help me optimize my code. My english is just at the OK level :D. Thanks.

P/s: Đã edit lại code và thêm một số chức năng nhỏ .
 

Joe

Thành viên VIP
21/1/13
2,697
1,245
113
Quyduc,
Sorry im not sure i followed you. What exactly am i doing wrong here and what should i do so that you could help me optimize my code. My english is just at the OK level :D. Thanks.

P/s: Đã edit lại code và thêm một số chức năng nhỏ .
You understand me perfectly. If I want to optimize your codes I have to rebuild the whole project for myself and that means I have to download netbeans or eclipse, install it...just because of your rss project. By the way, I give you the hints and you do your research so that you may learn more than I rewrite or modify your codes.
Here are 2 hints:
- Optimization
PHP:
private boolean checkRssValidate(char[] arrayChar) {
        if (arrayChar == null) return false;
        String a = new String(arrayChar);
        return (a.contains("rss") && a.contains("<channel>") && a.contains("title") && a.contains("<description>"));
}
- Problem zone (see my inserted comments)
PHP:
            ....
            URL url = new URL(linkdown);
            String linkSave = getLinkToSave(linkdown);
            URLConnection uCon = url.openConnection();
            InputStream reader = url.openStream();
            InputStreamReader isr = new InputStreamReader(reader, "utf-8");
            BufferedReader br = new BufferedReader(isr);
            progress.setMaximum(reader.available());
            File file = new File("data\\" + linkSave);
            FileOutputStream writer = new FileOutputStream(file);
            OutputStreamWriter osw = new OutputStreamWriter(writer, "utf-8");
            progress.setVisible(true);

            // you may get this Exception: "java.io.IOException: Premature EOF"
            // when the InputStream is a ChunkedInputStream
            // to avoid that you have to go down to Socket communication by
            // parsing the URL for Hostname and Port (which is usually 80)
            // then read the HTTP header for the keyword "Transfer-Encoding:"
            // if it stands "chunked" you have to handle it as a ChunkedInputStream
            // otherwise you'll get the Exception: "java.io.IOException: Premature EOF"
            // OR:
            String chunked = uCon.getHeaderField("Transfer-Encoding");
            if (chunked.equalsIgnoreCase("chunked")) {
                // do you Chunked stuff here
            }

            char[] buffer = new char[2048]; // 2k on Windows
            int bytesRead;
            int totalBytesRead = 0;
            int a = 0;
            boolean check = true;
            while ((bytesRead = br.read(buffer)) != -1) { // could be a 0.
                if (a == 0) {
                    if ((check = this.checkRssValidate(buffer)) == false) {
                        break;
                    }
                }
                a++;
                osw.write(buffer, 0, bytesRead);
                osw.flush(); // make sure that everything gets out.
                totalBytesRead += bytesRead;
                progress.setValue(totalBytesRead);
            }
            ...