title: Android Web Service connection refused
body: <p>I know that my code is correct because it worked once. There is no problem with my PHP because when it runs, it returns what I want. The problem here is in the request. I am trying to get the correct address but so far I've tried every possible one and had no success. My code is:</p>
  
  <pre><code>package com.example.testwiththread;
  
  import java.util.ArrayList;
  import java.util.List;
  
  import org.apache.http.NameValuePair;
  import org.apache.http.message.BasicNameValuePair;
  import org.json.JSONArray;
  import org.json.JSONException;
  import org.json.JSONObject;
  
  import android.app.Activity;
  import android.os.Bundle;
  import android.util.Log;
  import android.view.Menu;
  import android.view.View;
  import android.widget.EditText;
  import android.widget.Toast;
  
  public class MainActivity extends Activity {
      JSONParser jsonParser = new JSONParser();
      String pid;
      String name = "";
      String test = "";
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.service_details);
          new Thread(new TestThread()).start();
          Toast.makeText(this, "Hi", Toast.LENGTH_SHORT).show();
      }
  
      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          // Inflate the menu; this adds items to the action bar if it is present.
          getMenuInflater().inflate(R.menu.activity_main, menu);
          return true;
      }
  
      public void clickSend (View view) {
  
          EditText txtName = (EditText) findViewById(R.id.txtName);
          EditText txtPrice = (EditText) findViewById(R.id.txtTest);
  
          // display product data in EditText
          txtName.setText(name);
          txtPrice.setText(test);
          Log.e("Checking", name);
          Log.e("Checking", test);
      }
  
      public class TestThread extends Thread {
          public void run() {
              int success;
              try {
                  // Building Parameters
                  List&lt;NameValuePair&gt; params = new ArrayList&lt;NameValuePair&gt;();
                  params.add(new BasicNameValuePair("pid", pid));
  
                  // getting product details by making HTTP request
                  // Note that product details url will use GET request
                  JSONObject json = jsonParser.makeHttpRequest(
                          "http://10.0.2.2:8080/webservice.php", "GET", params);
  
                  // check your log for json response
                  Log.d("Single Record Details", json.toString());
  
                  // json success tag
                  success = json.getInt("success");
                  if (success == 1) {
                      // successfully received product details
                      JSONArray productObj = json.getJSONArray("record"); // JSON Array
  
                      // get first product object from JSON Array
                      JSONObject product = productObj.getJSONObject(1);
  
                      name = product.getString("name");
                      test = product.getString("test");
                  }
              } catch (JSONException e) {
                  Log.e("error", e.toString());
              }
          }
      }
  }
  </code></pre>
  
  <p>My JSON Parser:</p>
  
  <pre><code>package com.example.secondtestsqlserver;
  
  import java.io.BufferedReader;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  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.json.JSONException;
  import org.json.JSONObject;
  
  import android.util.Log;
  
  public class JSONParser {
  
      static InputStream is = null;
      static JSONObject jObj = null;
      static String json = "";
  
      // constructor
      public JSONParser() {
  
      }
  
      // function get json from url
      // by making HTTP POST or GET method
      public JSONObject makeHttpRequest(String url, String method,
              List&lt;NameValuePair&gt; params) {
  
          // Making HTTP request
          try {
  
              // check for request method
              if(method == "POST"){
                  // request method is POST
                  // defaultHttpClient
                  DefaultHttpClient httpClient = new DefaultHttpClient();
                  HttpPost httpPost = new HttpPost(url);
                  httpPost.setEntity(new UrlEncodedFormEntity(params));
  
                  HttpResponse httpResponse = httpClient.execute(httpPost);
                  HttpEntity httpEntity = httpResponse.getEntity();
                  is = httpEntity.getContent();
  
              }else if(method == "GET"){
                  // request method is GET
                  DefaultHttpClient httpClient = new DefaultHttpClient();
                  String paramString = URLEncodedUtils.format(params, "utf-8");
                  url += "?" + paramString;
                  HttpGet httpGet = new HttpGet(url);
  
                  HttpResponse httpResponse = httpClient.execute(httpGet);
                  HttpEntity httpEntity = httpResponse.getEntity();
                  is = httpEntity.getContent();
              }           
  
          } catch (UnsupportedEncodingException e) {
              Log.e("Unsupported Encoding", Log.getStackTraceString(e));
          } catch (ClientProtocolException e) {
              Log.e("Client Protocol", Log.getStackTraceString(e));
          } catch (IOException e) {
              Log.e("IO Exception", Log.getStackTraceString(e));
          }
  
          try {
              BufferedReader reader = new BufferedReader(new InputStreamReader(
                      is, "iso-8859-1"), 8);
              StringBuilder sb = new StringBuilder();
              String line = null;
              while ((line = reader.readLine()) != null) {
                  sb.append(line + "\n");
              }
              is.close();
              json = sb.toString();
          } catch (Exception e) {
              Log.e("Buffer Error", "Error converting result " + e.toString());
              System.out.println(e.toString());
          }
  
          // try parse the string to a JSON object
          try {
              jObj = new JSONObject(json);
          } catch (JSONException e) {
              Log.e("JSON Parser", "Error parsing data " + e.toString());
              Log.e("JSON Parser", json);
          }
  
          // return JSON String
          return jObj;
  
      }
  }
  </code></pre>
  
  <p>As you can see I am using 10.0.2.2:8080 as the localhost address. I have tried 127.0.0.1, localhost, and many other options included in the Android page for localhost. Most of them return this error</p>
  
  <pre><code>02-11 15:18:31.329: E/IO Exception(27504): org.apache.http.conn.HttpHostConnectException: Connection to http://10.0.2.2:8080 refused
  02-11 15:18:31.329: E/IO Exception(27504):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:183)
  02-11 15:18:31.329: E/IO Exception(27504):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
  02-11 15:18:31.329: E/IO Exception(27504):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
  02-11 15:18:31.329: E/IO Exception(27504):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
  02-11 15:18:31.329: E/IO Exception(27504):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
  02-11 15:18:31.329: E/IO Exception(27504):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
  02-11 15:18:31.329: E/IO Exception(27504):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
  02-11 15:18:31.329: E/IO Exception(27504):  at com.example.testwiththread.JSONParser.makeHttpRequest(JSONParser.java:62)
  02-11 15:18:31.329: E/IO Exception(27504):  at com.example.testwiththread.MainActivity$TestThread.run(MainActivity.java:63)
  02-11 15:18:31.329: E/IO Exception(27504):  at java.lang.Thread.run(Thread.java:856)
  02-11 15:18:31.329: E/IO Exception(27504): Caused by: java.net.ConnectException: failed to connect to /10.0.2.2 (port 8080): connect failed: ETIMEDOUT (Connection timed out)
  02-11 15:18:31.329: E/IO Exception(27504):  at libcore.io.IoBridge.connect(IoBridge.java:114)
  02-11 15:18:31.329: E/IO Exception(27504):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
  02-11 15:18:31.329: E/IO Exception(27504):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
  02-11 15:18:31.329: E/IO Exception(27504):  at java.net.Socket.connect(Socket.java:842)
  02-11 15:18:31.329: E/IO Exception(27504):  at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
  02-11 15:18:31.329: E/IO Exception(27504):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
  02-11 15:18:31.329: E/IO Exception(27504):  ... 9 more
  02-11 15:18:31.329: E/IO Exception(27504): Caused by: libcore.io.ErrnoException: connect failed: ETIMEDOUT (Connection timed out)
  02-11 15:18:31.329: E/IO Exception(27504):  at libcore.io.Posix.connect(Native Method)
  02-11 15:18:31.329: E/IO Exception(27504):  at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
  02-11 15:18:31.329: E/IO Exception(27504):  at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
  02-11 15:18:31.329: E/IO Exception(27504):  at libcore.io.IoBridge.connect(IoBridge.java:112)
  02-11 15:18:31.329: E/IO Exception(27504):  ... 14 more
  02-11 15:18:31.329: E/Buffer Error(27504): Error converting result java.lang.NullPointerException: lock == null
  02-11 15:18:31.329: E/JSON Parser(27504): Error parsing data org.json.JSONException: End of input at character 0 of 
  02-11 15:18:31.329: W/dalvikvm(27504): threadid=11: thread exiting with uncaught exception (group=0x40e46930)
  02-11 15:18:31.329: E/AndroidRuntime(27504): FATAL EXCEPTION: Thread-9043
  02-11 15:18:31.329: E/AndroidRuntime(27504): java.lang.NullPointerException
  02-11 15:18:31.329: E/AndroidRuntime(27504):    at com.example.testwiththread.MainActivity$TestThread.run(MainActivity.java:67)
  02-11 15:18:31.329: E/AndroidRuntime(27504):    at java.lang.Thread.run(Thread.java:856)
  </code></pre>
  
  <p>However, the only one that doesn't return this error is when I use my router's IP address. The problem is, even though the connection is not refused, it says that access is forbidden. Any help will be appreciated.</p>
  
  <p>EDIT: Just in case, I have given internet access in the Manifest.</p>