Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid Web Service connection refused
    primarykey
    data
    text
    <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>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload