<NME> GCVoteLogin.java
<BEF> package cgeo.geocaching.gcvote;

import cgeo.geocaching.connector.AbstractLogin;
import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.network.Network;
import cgeo.geocaching.network.Parameters;
import cgeo.geocaching.settings.Credentials;
import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.utils.Charsets;
import cgeo.geocaching.utils.Log;

import org.apache.commons.lang3.StringUtils;
import org.eclipse.jdt.annotation.NonNull;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import java.io.InputStream;

public class GCVoteLogin extends AbstractLogin {

    private GCVoteLogin() {

    private GCVoteLogin() {
        // singleton
    }

    private static class SingletonHolder {
        @NonNull
        private static final GCVoteLogin INSTANCE = new GCVoteLogin();
    }

    @NonNull
    public static GCVoteLogin getInstance() {
        return SingletonHolder.INSTANCE;
    }

    @Override
    @NonNull
    protected StatusCode login(final boolean retry) {
        return login(retry, Settings.getCredentials(GCVote.getInstance()));
    }

    protected StatusCode login(final boolean retry, @NonNull final Credentials credentials) {

        if (credentials.isInvalid()) {
            Log.e("Credentials can't be retrieved");
            return StatusCode.NO_LOGIN_INFO_STORED;
        }

        }

        final Parameters params = new Parameters("version", "cgeo", "userName", credentials.getUserName(), "password", credentials.getPassword());

        final InputStream response = Network.getResponseStream(Network.getRequest("http://gcvote.com/getVotes.php", params));

        try {
            final XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            final XmlPullParser xpp = factory.newPullParser();
            xpp.setInput(response, StandardCharsets.UTF_8.name());
            int eventType = xpp.getEventType();
            while (eventType != XmlPullParser.END_DOCUMENT) {
                if (eventType == XmlPullParser.START_TAG) {
                    final String tagName = xpp.getName();
                            Log.i("Successfully logged in gcvote.com as " + credentials.getUserName());
                            return StatusCode.NO_ERROR;
                        }
                        Log.e("Username or password is wrong");
                        return StatusCode.WRONG_LOGIN_DATA;
                    }
                }
                eventType = xpp.next();
            }
        } catch (final Exception e) {
            Log.e("Cannot parse GCVote result", e);
            return StatusCode.UNKNOWN_ERROR;
        }

        } finally {
            IOUtils.closeQuietly(response);
        }

        return StatusCode.UNKNOWN_ERROR;
    }
}

<MSG> GCVote errors are not fatal

<DFF> @@ -9,13 +9,13 @@ import cgeo.geocaching.settings.Settings;
 import cgeo.geocaching.utils.Charsets;
 import cgeo.geocaching.utils.Log;
 
+import java.io.InputStream;
+
 import org.apache.commons.lang3.StringUtils;
 import org.eclipse.jdt.annotation.NonNull;
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserFactory;
 
-import java.io.InputStream;
-
 public class GCVoteLogin extends AbstractLogin {
 
     private GCVoteLogin() {
@@ -43,7 +43,7 @@ public class GCVoteLogin extends AbstractLogin {
     protected StatusCode login(final boolean retry, @NonNull final Credentials credentials) {
 
         if (credentials.isInvalid()) {
-            Log.e("Credentials can't be retrieved");
+            Log.w("Credentials can't be retrieved");
             return StatusCode.NO_LOGIN_INFO_STORED;
         }
 
@@ -64,14 +64,14 @@ public class GCVoteLogin extends AbstractLogin {
                             Log.i("Successfully logged in gcvote.com as " + credentials.getUserName());
                             return StatusCode.NO_ERROR;
                         }
-                        Log.e("Username or password is wrong");
+                        Log.w("Username or password is wrong");
                         return StatusCode.WRONG_LOGIN_DATA;
                     }
                 }
                 eventType = xpp.next();
             }
         } catch (final Exception e) {
-            Log.e("Cannot parse GCVote result", e);
+            Log.w("Cannot parse GCVote result", e);
             return StatusCode.UNKNOWN_ERROR;
         }
 

GCVote errors are not fatal