I am having problems executing an AlertDialog in postexecute (). Throws this exception. Called: java.lang.RuntimeException: cannot create a handler inside the thread that Looper.prepare () did not call. Alternatively, when I placed AlertDialog.Builder, it just didn't work. Help Pls. Also, if you enter the wrong password, the process ends. How can I call the Toast method if the username or password is invalid The code snippet is below
public void Login() { // Toast.makeText(getBaseContext(), pass.getText() + " " // +user.getText(), // Toast.LENGTH_SHORT).show(); String url = "http://107.20.195.151/mcast_ws/" + "?user=" + user.getText().toString() + "&password=" + pass.getText().toString(); result = getHttpResponse(url); } String result; private String getHttpResponse(String location) { result = ""; URL url = null; Log.d(LOGTAG, " " + "location " + location); try { url = new URL(location); } catch (MalformedURLException e) { Log.e(LOGTAG, " " + "error" + e.getMessage()); } if (url != null) { try { HttpURLConnection connection = (HttpURLConnection) url .openConnection(); BufferedReader in = new BufferedReader(new InputStreamReader( connection.getInputStream())); String inputLine; int lineCount = 0; while ((inputLine = in.readLine()) != null) { result += inputLine.trim(); } in.close(); connection.disconnect(); } catch (Exception e) { Log.e(LOGTAG, " " + "IOError " + e.getMessage()); Toast.makeText(getBaseContext(), "No Internet Access", Toast.LENGTH_SHORT); } } else { Log.e(LOGTAG, " " + "url" + url); } return result; } class PostToTwitter extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... params) { Login(); Log.d(LOGTAG, "Success"); Log.d(LOGTAG, result); Log.d(LOGTAG, result.substring(0, 16).trim()); // Log.d(TweetActivity.getLogtag(),"Successfully Posted: " + // params[0]); return "success"; } @Override protected void onPostExecute(String r) { // TODO Auto-generated method stub super.onPostExecute(result); String msg = "Login successful"; if (result.substring(0, 16).trim().equals(msg)) { // System.out.println(result.substring(0, 16).trim()); Log.d(LOGTAG, " " + "Connection Test" + result); AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext()); builder.setMessage("Are you sure send this SMS?") .setCancelable(false) .setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { //...Attach another thread event to send the sms } }) .setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); Log.e(LOGTAG, "Error detected 2"); AlertDialog alert = builder.create(); alert.show(); //return "success"; // Toast.makeText(getBaseContext(), // "Login Succesful",Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getBaseContext(), "Login UnSuccesful. Check Username or password", Toast.LENGTH_SHORT).show(); //return null; } // Toast.makeText(getApplicationContext(), result // ,Toast.LENGTH_SHORT).show(); Log.e(LOGTAG, "Error detected"); /* Intent i = new Intent("com.sms.subsahara.COMPOSESMS"); startActivity(i); //Log.e(LOGTAG, " " + "error2");*/ } }
When applying suggestions from Alex, I changed the source code described above, but I still get the error message. Below is an exception from logcat
E/AndroidRuntime( 326): Uncaught handler: thread main exiting due to uncaught exception E/AndroidRuntime( 326): android.view.WindowManager$BadTokenException: Unable to add window