iandreyshev / android_parser_rss

My first android application. Look master-kotlin branch
0 stars 0 forks source link

Замечания по программе ParserRss #2

Closed oMystique closed 6 years ago

oMystique commented 6 years ago

Смотрел в ветке parser-rss

Замечания по коду

InsertRssTask

Others

Замечания по приложению

oMystique commented 6 years ago
genaku commented 6 years ago

В RssTabsAdapter хранить фрагменты RssTabFragment не стоит, потому как управлением фрагментами занимается сам FragmentStatePagerAdapter. Лучше хранить там список с параметрами rss-лент и при добавлении/удалении этих лент оперировать не добавлением/удалением фрагментов, а списком с параметрами этих лент.

Вместо

    public Fragment getItem(int position) {
        return mFragments.get(mRssList.get(position).getFeed());
}

надо использовать стандартный для этого адаптера метод:

    public Fragment getItem(int position) {
        return RssTabFragment.newInstance(params[position]);
    }

где params[position] это какие-то параметры для rss-ленты из списка лент, хранящегося внутри адаптера.

Передавать команды на обновление и т.д. текущего фрагмента можно напрямую. Для этого можно использовать SmartFragmentStatePagerAdapter. У него есть метод: getRegisteredFragment(int position)

oMystique commented 6 years ago

Смотрел в ветке Database

oMystique commented 6 years ago
oMystique commented 6 years ago

Вьюху с лентами следует сделать другого цвета. Сейчас она сливается с контентом самой ленты. Быть может, достаточно будет добавить тень. Или же сделать менее блеклым Navigation Bar. Следует проверить.

oMystique commented 6 years ago
oMystique commented 6 years ago
    private GetRssFromNetTask() {
    }

    public static void execute(final IEventListener listener, final String url) {
        final GetRssFromNetTask task = new GetRssFromNetTask();
        task.setTaskListener(listener);
        task.mRequestHandler = new HttpRequestHandler(url);
        task.mListener = listener;
        task.execute();
    }
oMystique commented 6 years ago
oMystique commented 6 years ago

Иначе, проверка вида

} else if (!parseRss()) {
            return null;

всегда будет проходить, что нам не нужно

oMystique commented 6 years ago
oMystique commented 6 years ago
oMystique commented 6 years ago
oMystique commented 6 years ago
oMystique commented 6 years ago

java.lang.AssertionError at org.junit.Assert.fail(Assert.java:86) at org.junit.Assert.assertTrue(Assert.java:41) at org.junit.Assert.assertNotNull(Assert.java:712) at org.junit.Assert.assertNotNull(Assert.java:722) at ru.iandreyshev.parserrss.models.rss.RssParserV2Test.parseFileAndCheck(RssParserV2Test.java:140) at ru.iandreyshev.parserrss.models.rss.RssParserV2Test.parse_rss_with_feed_title_and_description_only(RssParserV2Test.java:35) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMainV2.main(AppMainV2.java:131)

...

oMystique commented 6 years ago

java.lang.NullPointerException at ru.iandreyshev.parserrss.models.web.HttpRequestHandler.sendGet(HttpRequestHandler.java:35) at ru.iandreyshev.parserrss.models.web.HttpRequestHandlerTest.return_invalid_url_state_after_send_with_null_url(HttpRequestHandlerTest.java:15) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMainV2.main(AppMainV2.java:131)

oMystique commented 6 years ago
public class UrlTest {
    private static final String VALID_URL = "http://domain.com/";

    @Test
    public void return_null_if_parse_null_string() {
        assertNull(Url.parse(null));
    }

    @Test
    public void return_null_if_parse_empty_string() {
        assertNull(Url.parse(""));
    }

    @Test
    public void return_url_string_in_toString_method() {
        final Url url = Url.parse(VALID_URL);

        assertNotNull(url);
        assertEquals(VALID_URL, url.toString());
    }
}
oMystique commented 6 years ago
oMystique commented 6 years ago
oMystique commented 6 years ago
oMystique commented 6 years ago
oMystique commented 6 years ago
oMystique commented 6 years ago
oMystique commented 6 years ago
oMystique commented 6 years ago
genaku commented 6 years ago

По Clean Architecture. Это хорошо, что ты сущности базы данных отделил от модели. Но на данный момент у тебя классическая MVP, вся логика приложения зашита в презентерах. Изучи статью https://habrahabr.ru/company/mobileup/blog/335382/

genaku commented 6 years ago

По Kotlin: Конструкции вида: if (entityProperty == null) { return null } можно упростить: entityProperty ?: return null

oMystique commented 6 years ago

Здесь работу закончили.