0

This error occurs whenever i click the login button,both on the emulator and my phone.I really dont know what could be the issue

Here's the userfunction.java class:

package com.example.androidhive.library;



import java.util.ArrayList;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONObject;

import android.content.Context;

public class UserFunctions {

    private JSONParser jsonParser;

    private static String loginURL = "http://127.0.0.1/android_login_api/";
    private static String registerURL = "http://127.0.0.1/android_login_api/";

    private static String login_tag = "login";
    private static String register_tag = "register";

    // constructor
    public UserFunctions(){
        jsonParser = new JSONParser();
    }

    /**
     * function make Login Request
     * @param email
     * @param password
     * */
    public JSONObject loginUser(String email, String password){
        // Building Parameters
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("tag", login_tag));
        params.add(new BasicNameValuePair("email", email));
        params.add(new BasicNameValuePair("password", password));
        JSONObject json = jsonParser.getJSONFromUrl(loginURL, params);
        // return json
        // Log.e("JSON", json.toString());
        return json;
    }

    /**
     * function make Login Request
     * @param name
     * @param email
     * @param password
     * */
    public JSONObject registerUser(String name, String email, String password){
        // Building Parameters
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("tag", register_tag));
        params.add(new BasicNameValuePair("name", name));
        params.add(new BasicNameValuePair("email", email));
        params.add(new BasicNameValuePair("password", password));

        // getting JSON Object
        JSONObject json = jsonParser.getJSONFromUrl(registerURL, params);
        // return json
        return json;
    }

    /**
     * Function get Login status
     * */
    public boolean isUserLoggedIn(Context context){
        DatabaseHandler db = new DatabaseHandler(context);
        int count = db.getRowCount();
        if(count > 0){
            // user logged in
            return true;
        }
        return false;
    }

    /**
     * Function to logout user
     * Reset Database
     * */
    public boolean logoutUser(Context context){
        DatabaseHandler db = new DatabaseHandler(context);
        db.resetTables();
        return true;
    }

}

This is the login.java file

package com.example.androidhive;

import java.util.HashMap;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import com.example.androidhive.library.DatabaseHandler;
import com.example.androidhive.library.UserFunctions;

public class LoginActivity extends Activity {
    Button btnLogin;
    Button btnLinkToRegister;
    EditText inputEmail;
    EditText inputPassword;
    TextView loginErrorMsg;

    // JSON Response node names
    private static String KEY_SUCCESS = "success";
    private static String KEY_ERROR = "error";
    private static String KEY_ERROR_MSG = "error_msg";
    private static String KEY_UID = "uid";
    private static String KEY_NAME = "name";
    private static String KEY_EMAIL = "email";
    private static String KEY_CREATED_AT = "created_at";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);

        // Importing all assets like buttons, text fields
        inputEmail = (EditText) findViewById(R.id.loginEmail);
        inputPassword = (EditText) findViewById(R.id.loginPassword);
        btnLogin = (Button) findViewById(R.id.btnLogin);
        btnLinkToRegister = (Button) findViewById(R.id.btnLinkToRegisterScreen);
        loginErrorMsg = (TextView) findViewById(R.id.login_error);

        // Login button Click Event
        btnLogin.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                String email = inputEmail.getText().toString();
                String password = inputPassword.getText().toString();
                UserFunctions userFunction = new UserFunctions();
                Log.d("Button", "Login");
                JSONObject json = userFunction.loginUser(email, password);

                // check for login response
                try {
                    if (json.getString(KEY_SUCCESS) != null) {
                        loginErrorMsg.setText("");
                        String res = json.getString(KEY_SUCCESS); 
                        if(Integer.parseInt(res) == 1){
                            // user successfully logged in
                            // Store user details in SQLite Database
                            DatabaseHandler db = new DatabaseHandler(getApplicationContext());
                            JSONObject json_user = json.getJSONObject("user");

                            // Clear all previous data in database
                            userFunction.logoutUser(getApplicationContext());
                            db.addUser(json_user.getString(KEY_NAME), json_user.getString(KEY_EMAIL), json.getString(KEY_UID), json_user.getString(KEY_CREATED_AT));                        

                            // Launch Dashboard Screen
                            Intent spinner = new Intent(getApplicationContext(), MainActivity.class);

                            // Close all views before launching Dashboard
                            spinner.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                            startActivity(spinner);

                            // Close Login Screen
                            finish();
                        }else{
                            // Error in login
                            loginErrorMsg.setText("Incorrect username/password");
                        }
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });

        // Link to Register Screen
        btnLinkToRegister.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                Intent i = new Intent(getApplicationContext(),
                        RegisterActivity.class);
                startActivity(i);
                finish();
            }
        });
    }
}

Logcat:

01-26 20:59:58.342: E/AndroidRuntime(611):  at libcore.io.IoBridge.connect(IoBridge.java:112)
01-26 20:59:58.342: E/AndroidRuntime(611):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
01-26 20:59:58.342: E/AndroidRuntime(611):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
01-26 20:59:58.342: E/AndroidRuntime(611):  at java.net.Socket.connect(Socket.java:842)
01-26 20:59:58.342: E/AndroidRuntime(611):  at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
01-26 20:59:58.342: E/AndroidRuntime(611):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
01-26 20:59:58.342: E/AndroidRuntime(611):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
01-26 20:59:58.342: E/AndroidRuntime(611):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
01-26 20:59:58.342: E/AndroidRuntime(611):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
01-26 20:59:58.342: E/AndroidRuntime(611):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
01-26 20:59:58.342: E/AndroidRuntime(611):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
01-26 20:59:58.342: E/AndroidRuntime(611):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
01-26 20:59:58.342: E/AndroidRuntime(611):  at com.example.androidhive.library.JSONParser.getJSONFromUrl(JSONParser.java:47)
01-26 20:59:58.342: E/AndroidRuntime(611):  at com.example.androidhive.library.UserFunctions.loginUser(UserFunctions.java:43)
01-26 20:59:58.342: E/AndroidRuntime(611):  at com.example.androidhive.LoginActivity$1.onClick(LoginActivity.java:61)
01-26 20:59:58.342: E/AndroidRuntime(611):  at android.view.View.performClick(View.java:3511)
01-26 20:59:58.342: E/AndroidRuntime(611):  at android.view.View$PerformClick.run(View.java:14105)
01-26 20:59:58.342: E/AndroidRuntime(611):  at android.os.Handler.handleCallback(Handler.java:605)
01-26 20:59:58.342: E/AndroidRuntime(611):  at android.os.Handler.dispatchMessage(Handler.java:92)
01-26 20:59:58.342: E/AndroidRuntime(611):  at android.os.Looper.loop(Looper.java:137)
01-26 20:59:58.342: E/AndroidRuntime(611):  at android.app.ActivityThread.main(ActivityThread.java:4424)
01-26 20:59:58.342: E/AndroidRuntime(611):  at java.lang.reflect.Method.invokeNative(Native Method)
01-26 20:59:58.342: E/AndroidRuntime(611):  at java.lang.reflect.Method.invoke(Method.java:511)
01-26 20:59:58.342: E/AndroidRuntime(611):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-26 20:59:58.342: E/AndroidRuntime(611):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-26 20:59:58.342: E/AndroidRuntime(611):  at dalvik.system.NativeStart.main(Native Method)
01-26 21:00:03.673: E/dalvikvm(192): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
01-26 21:00:05.575: E/InputDispatcher(93): channel '41602a68 com.example.androidhive/com.example.androidhive.LoginActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
01-26 21:00:42.803: E/ActivityManager(93):   34% 93/system_server: 17% user + 16% kernel / faults: 1 minor
01-26 21:00:42.803: E/ActivityManager(93):     31% 108/ActivityManager: 15% user + 16% kernel
tyczj
  • 71,600
  • 54
  • 194
  • 296
  • possible duplicate of [android.os.NetworkOnMainThreadException](http://stackoverflow.com/questions/6343166/android-os-networkonmainthreadexception) – 323go Jan 26 '15 at 18:08
  • Check these posts to see if you could find anything useful http://stackoverflow.com/q/12459719/603744 and http://stackoverflow.com/q/22758482/603744 – Andro Selva Jan 26 '15 at 18:15

2 Answers2

0

It seems you are doing some network related operations like network connection in

jsonParser.getJSONFromUrl(loginURL, params);

if a network related operation is called in UI thread then it will throw exception, try to do network related operations in Async Task or in thread.

H4SN
  • 1,482
  • 3
  • 24
  • 43
0

When you setup your program you used the default domain for your domain which is example.com you need to refactor your domain. In Android Studio,

app>java>com.example.whatever.else.you.put

right click on the package(s) and select refactor. Then refactor these to localhost. You may have to recreate everything from the start and import the files you want but hopefully refactoring will work for you.

kayleighsdaddy
  • 670
  • 5
  • 15