I'm developing my android app for a conference. In, my login page I printed an error message when no internet connection. but, the app crashes when no internet connection and following error message display in logcat.
I followed many questions from stack overflow and may be I can't understand, I couldn't find my answer.

```html
08-19 10:01:21.840  

8931-9124/com.NICT.nict E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-691

java.lang.RuntimeException: Can't create handler inside thread that hasnot called Looper.prepare()

           at android.os.Handler.<init>(Handler.java:205)

           at android.os.Handler.<init>(Handler.java:119)

           atandroid.widget.Toast$TN.<init>(Toast.java:325)

           atandroid.widget.Toast.<init>(Toast.java:91)

           atandroid.widget.Toast.makeText(Toast.java:239)

           at com.NICT.nict.services.MessageHandler.showMessage(MessageHandler.java:9)
           at com.NICT.nict.LoginActivity$1$1.run(LoginActivity.java:117)

           at java.lang.Thread.run(Thread.java:838)
```

Here is my login activity

```html
package com.NICT.nict;

import org.json.JSONObject;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;

import com.NICT.nict.WorkShopActivity.HttpAsyncTask;
import com.NICT.nict.services.EmailValidator;
import com.NICT.nict.services.MessageHandler;
import com.NICT.nict.services.ServiceHandler;

public class LoginActivity extends Activity {

 public final static String URL = "http://demo.et.lk/nitcapi/api/login";

 public static String Uid;

 private Button loginBtn;

 private EditText codeEdit;

 private EditText nameEdit;

 private EditText emailEdit;

 private ServiceHandler sh = new ServiceHandler();

 private boolean errorStatus;

 private ProgressBar spinner;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_login);

  loginBtn = (Button) findViewById(R.id.loginBtn);
  codeEdit = (EditText) findViewById(R.id.codeEdit);
  nameEdit = (EditText) findViewById(R.id.nameEdit);
  emailEdit = (EditText) findViewById(R.id.emailEdit);
  spinner = (ProgressBar) findViewById(R.id.progressBar1);
  spinner.setVisibility(View.GONE);
  loginBtn.setOnClickListener(new View.OnClickListener() {

   @Override
   public void onClick(View v) {

    if (!ServiceHandler.isOnline(getApplicationContext())) {
     MessageHandler.showMessage("You are not online.",
       getApplicationContext());
    }
    new Thread(new Runnable() {
     public void run() {

      String code = codeEdit.getText().toString();
      String email = emailEdit.getText().toString();
      String name = nameEdit.getText().toString();
      if (code.length() == 0) {
       runOnUiThread(new Runnable() {
        public void run() {
         MessageHandler.showMessage(
           "Please Enter the app code",
           getApplicationContext());
         errorStatus = true;
        }
       });
       ;
      } else if (name.length() == 0) {
       runOnUiThread(new Runnable() {
        public void run() {
         MessageHandler.showMessage(
           "Please Enter Your Name",
           getApplicationContext());
         errorStatus = true;
        }
       });
       ;
      } else if (email.length() == 0) {
       runOnUiThread(new Runnable() {
        public void run() {
         MessageHandler.showMessage(
           "Please Enter Your Email",
           getApplicationContext());
         errorStatus = true;
        }
       });
       ;
      }

      EmailValidator emailValidator = new EmailValidator();
      if(!emailValidator.validate(email)){
       runOnUiThread(new Runnable() {
        public void run() {
         MessageHandler.showMessage(
           "Invalid Email",
           getApplicationContext());
         errorStatus = true;
        }
       });
       ;
      }

      String jsonStr = null;
      if (!errorStatus) {

       if (!ServiceHandler.isOnline(getApplicationContext())) {
        MessageHandler.showMessage("You are not online.",
          getApplicationContext());
       } else {
        ConnectivityManager conMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

             // notify user you are online
         try{
           runOnUiThread(new Runnable() {
            public void run() {
          spinner.setVisibility(View.VISIBLE);
            }
           });
           ;

         jsonStr = sh.makeServiceCall(URL + "/" + code + "/"
           + name + "/" + email, ServiceHandler.GET);
         System.out.println(URL + "/" + code + "/" + name + "/"
           + email);

         }
         catch (Exception e){
          spinner.setVisibility(View.GONE);
          runOnUiThread(new Runnable() {
           public void run() {
          MessageHandler.showMessage("You are not online.",
            getApplicationContext());

           }
          });
          ;

         }

       }

       if (jsonStr != null) {
        String status = "";
        String msg = "";

        try {
         JSONObject jsonObj = new JSONObject(jsonStr);
          runOnUiThread(new Runnable() {
           public void run() {
         spinner.setVisibility(View.GONE);
           }
          });
          ;

         if (jsonObj != null
           && jsonObj.has("status")) {
          status = jsonObj.getString("status");
          msg = jsonObj.getString("message");
          if(jsonObj.has("uid"))
           Uid = jsonObj.getString("uid");
          System.out.println(jsonObj);
          if (status.equals("OK")) {
           Intent myIntent = new Intent(
             getBaseContext(),
             MainMenuActivity.class);
           startActivityForResult(myIntent, 0);
          } else if (status.equals("ERROR")) {
           final String errorMsg = msg;
           runOnUiThread(new Runnable() {
            public void run() {
             MessageHandler
               .showMessage(
                 errorMsg,
                 getApplicationContext());
            }
           });
           ;
          } else {
           runOnUiThread(new Runnable() {
            public void run() {
             MessageHandler
               .showMessage(
                 "Oops..! something wrong with the service. Please try again Later.",
                 getApplicationContext());
            }
           });
           ;
          }
         }
        } catch (Exception e) {
         System.out
           .println("Creation of json object failed");
        }

       }
      }

     }
    }).start();

   }
  });
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  getMenuInflater().inflate(R.menu.login, menu);
  return true;
 }

}
```

Here is my serviceHandler.

```html
package com.NICT.nict.services;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

public class ServiceHandler {

 static String response = null;
 public final static int GET = 1;
 public final static int POST = 2;

 public ServiceHandler() {

 }

 /**
  * Making service call
  * 
  * @url - url to make request
  * @method - http request method
  * */
 public String makeServiceCall(String url, int method) {
  return this.makeServiceCall(url, method, null);
 }

 /**
  * Making service call
  * 
  * @url - url to make request
  * @method - http request method
  * @params - http request params
  * */
 public String makeServiceCall(String url, int method,
   List<NameValuePair> params) {
  try {
   // http client
   DefaultHttpClient httpClient = new DefaultHttpClient();
   HttpEntity httpEntity = null;
   HttpResponse httpResponse = null;

   // Checking http request method type
   if (method == POST) {
    HttpPost httpPost = new HttpPost(url);
    // adding post params
    if (params != null) {
     httpPost.setEntity(new UrlEncodedFormEntity(params));
    }

    httpResponse = httpClient.execute(httpPost);

   } else if (method == GET) {
    // appending params to url
    if (params != null) {
     String paramString = URLEncodedUtils
       .format(params, "utf-8");
     url += "?" + paramString;
    }
    HttpGet httpGet = new HttpGet(url);

    httpResponse = httpClient.execute(httpGet);

   }
   httpEntity = httpResponse.getEntity();
   response = EntityUtils.toString(httpEntity);

  } catch (UnsupportedEncodingException e) {
   e.printStackTrace();
  } catch (ClientProtocolException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }

  return response;

 }

 public static boolean isOnline(Context ctx) {
  ConnectivityManager cm;
  NetworkInfo info = null;
  try {
   cm = (ConnectivityManager) ctx
     .getSystemService(Context.CONNECTIVITY_SERVICE);
   info = cm.getActiveNetworkInfo();
  } catch (Exception e) {
   e.printStackTrace();
  }
  return (info!=null&&!info.equals(null));
 }
}
```