1

I am trying to create an android application that requires a login/registration and I'm not getting any errors but it doesn't connect to the internet. I have a section that when the register button is pressed for the app to say "Checking network" but it just gets stuck on that and never moves on I don't know what seems to be the problem. I am a newbie to java so its probably something really simple and I thank you in advance for any help or tips given!

This here is my register.java

public class Register extends Activity { /** * JSON Response node names. **/ private static String KEY_Success = "Success"; private static String KEY_Client_ID = "Client_ID"; private static String KEY_Name = "Name"; private static String KEY_Email = "Email"; private static String KEY_Username = "Username"; private static String KEY_Password = "Password"; private static String KEY_ERROR = "error"; /** * Defining layout items. **/ EditText inputName; EditText inputUsername; EditText inputEmail; EditText inputPassword; Button btnRegister; TextView registerErrorMsg; /** * Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.register); /** * Defining all layout items **/ inputName = (EditText) findViewById(R.id.name); inputUsername = (EditText) findViewById(R.id.uname); inputEmail = (EditText) findViewById(R.id.email); inputPassword = (EditText) findViewById(R.id.pword); btnRegister = (Button) findViewById(R.id.register); registerErrorMsg = (TextView) findViewById(R.id.register_error); /** * Button which Switches back to the login screen on clicked **/ Button login = (Button) findViewById(R.id.bktologin); login.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { Intent myIntent = new Intent(view.getContext(), Login.class); startActivityForResult(myIntent, 0); finish(); } }); /** * Register Button click event. * A Toast is set to alert when the fields are empty. * Another toast is set to alert Username must be 5 characters. **/ btnRegister.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if ( ( !inputUsername.getText().toString().equals("")) && ( !inputPassword.getText().toString().equals("")) && ( !inputName.getText().toString().equals("")) && ( !inputEmail.getText().toString().equals("")) ) { if ( inputUsername.getText().toString().length() > 4 ){ NetAsync(view); } else { Toast.makeText(getApplicationContext(), "Username should be minimum 5 characters", Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(getApplicationContext(), "One or more fields are empty", Toast.LENGTH_SHORT).show(); } } }); } /** I THINK THE PROBLEM IS AROUND THIS AREA! * Async Task to check whether internet connection is working **/ private class NetCheck extends AsyncTask { private ProgressDialog nDialog; @Override protected Object doInBackground(Object[] params) { return null; } @Override protected void onPreExecute(){ super.onPreExecute(); nDialog = new ProgressDialog(Register.this); nDialog.setMessage("Loading, please be patient..."); nDialog.setTitle("Checking Network"); nDialog.setIndeterminate(false); nDialog.setCancelable(true); nDialog.show(); } protected Boolean doInBackground(String... args){ /** * Gets current device state and checks for working internet connection by trying Google. **/ ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = cm.getActiveNetworkInfo(); if (netInfo != null && netInfo.isConnected()) { try { URL url = new URL("http://www.google.com"); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setConnectTimeout(3000); urlConnection.connect(); if (urlConnection.getResponseCode() == 200) { return true; } } catch (MalformedURLException e1) { e1.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } return false; } protected void onPostExecute(Boolean th){ if(th == true){ nDialog.dismiss(); new ProcessRegister().execute(); } else{ nDialog.dismiss(); registerErrorMsg.setText("Error in Network Connection"); } } } private class ProcessRegister extends AsyncTask { /** * Defining Process dialog **/ private ProgressDialog pDialog; String email,password,name,uname; @Override protected Object doInBackground(Object[] params) { return null; } @Override protected void onPreExecute() { super.onPreExecute(); inputUsername = (EditText) findViewById(R.id.uname); inputPassword = (EditText) findViewById(R.id.pword); name = inputName.getText().toString(); email = inputEmail.getText().toString(); uname= inputUsername.getText().toString(); password = inputPassword.getText().toString(); pDialog = new ProgressDialog(Register.this); pDialog.setTitle("Contacting Servers"); pDialog.setMessage("Registering ..."); pDialog.setIndeterminate(false); pDialog.setCancelable(true); pDialog.show(); } protected JSONObject doInBackground(String... args) { UserFunctions userFunction = new UserFunctions(); JSONObject json = userFunction.registerUser(name, email, uname, password); return json; } protected void onPostExecute(JSONObject json) { /** * Checks for success message. **/ try { if (json.getString(KEY_Success) != null) { registerErrorMsg.setText(""); String res = json.getString(KEY_Success); String red = json.getString(KEY_ERROR); if(Integer.parseInt(res) == 1){ pDialog.setTitle("Getting Data"); pDialog.setMessage("Loading Info"); registerErrorMsg.setText("Successfully Registered"); DatabaseHandler db = new DatabaseHandler(getApplicationContext()); JSONObject json_user = json.getJSONObject("user"); /** * Removes all the previous data in the SQlite database **/ UserFunctions logout = new UserFunctions(); logout.logoutUser(getApplicationContext()); db.addUser(json_user.getString(KEY_Name),json_user.getString(KEY_Email),json_user.getString(KEY_Username)); /** * Stores registered data in SQlite Database * Launch Registered screen **/ Intent registered = new Intent(getApplicationContext(), Registered.class); /** * Close all views before launching Registered screen **/ registered.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); pDialog.dismiss(); startActivity(registered); finish(); } else if (Integer.parseInt(red) ==2){ pDialog.dismiss(); registerErrorMsg.setText("User already exists"); } else if (Integer.parseInt(red) ==3){ pDialog.dismiss(); registerErrorMsg.setText("Invalid Email id"); } } else{ pDialog.dismiss(); registerErrorMsg.setText("Error occured in registration"); } } catch (JSONException e) { e.printStackTrace(); } }} public void NetAsync(View view){ new NetCheck().execute(); }} 

I have just noticed this though:

/** * The "doInBackground" is not being used" I don't know what that means. **/ protected Boolean doInBackground(String... args){ /** * Gets current device state and checks for working internet connection by trying Google. **/ ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = cm.getActiveNetworkInfo(); if (netInfo != null && netInfo.isConnected()) { try { URL url = new URL("http://www.google.com"); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setConnectTimeout(3000); urlConnection.connect(); if (urlConnection.getResponseCode() == 200) { return true; } } catch (MalformedURLException e1) { e1.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } return false; } /** * The "onPostExecute" is not being used" I don't know what that means. **/ protected void onPostExecute(Boolean th) { if(th == true){ nDialog.dismiss(); new ProcessRegister().execute(); } else{ nDialog.dismiss(); registerErrorMsg.setText("Error in Network Connection"); } } 
5
  • 1
    Do you have the Internet permission? <uses-permission android:name="android.permission.INTERNET" /> Commented Apr 23, 2015 at 15:13
  • I have checked and yes I have. Commented Apr 23, 2015 at 15:14
  • What response code are you getting? Commented Apr 23, 2015 at 15:18
  • I am using Android Studios and logcat is showing no results, all the app seems to be doing is giving me the message "Checking Network" that i added. Commented Apr 23, 2015 at 15:22
  • I have just edited my post it seems like the protected boolean and the private void classes are not being used, does anyone know what I have done wrong? Commented Apr 23, 2015 at 15:32

1 Answer 1

2

You have multiple methods called:

protected Object doInBackground(Object[] params) 

And

protected Boolean doInBackground(String... args) 

You need to delete the empty one.

Sign up to request clarification or add additional context in comments.

3 Comments

Thank you, I have just done so and delete the empty one but came out with an error here: private class NetCheck extends AsyncTask The error is: "Class 'NetCheck' must either be declared abstract or implement abstract method 'doInBackground(Params...) in 'AsyncTask'" What does this mean exactly?
You need the correct generics in your AsyncTask. Example: extends AsyncTask<String, Void, Boolean>
@geek101: Did this solve your problem? If you, please remember to mark this question as answered.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.