0

I am trying to use below code to post some data in Java (In Android Studio):

public static String downloadContent(URL url, ContentValues dataToPost) throws IOException {
    InputStream is = null;
    int length = 500;
    String contentAsString = "";

    try {
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setReadTimeout(10000 /* milliseconds */);
        conn.setConnectTimeout(15000 /* milliseconds */);
        conn.setRequestMethod("GET");
        conn.setDoInput(true);

        String queryString = getQuery(dataToPost);
        conn.connect();
        OutputStream os = conn.getOutputStream();
        int response = conn.getResponseCode();
        BufferedWriter writer = new BufferedWriter(
                new OutputStreamWriter(os, "UTF-8"));
        writer.write(queryString);
        writer.flush();
        writer.close();
        is = conn.getInputStream();
        contentAsString = convertInputStreamToString(is, length);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ProtocolException e) {
        e.printStackTrace();
        e.printStackTrace();
    } catch (IOException e) {
        String k = e.getMessage();
    } finally {
        if (is != null) {
            is.close();
        }
    }
    return contentAsString;
}

private static String getQuery(ContentValues params) throws UnsupportedEncodingException {
    StringBuilder result = new StringBuilder();
    boolean first = true;

    for (String key : params.keySet()) {
        if (first)
            first = false;
        else
            result.append("&");

        result.append(URLEncoder.encode(key, "UTF-8"));
        result.append("=");
        result.append(URLEncoder.encode(params.get(key).toString(), "UTF-8"));
    }

    return result.toString();
}

public static String convertInputStreamToString(InputStream stream, int length) throws IOException, UnsupportedEncodingException {
    Reader reader = null;
    reader = new InputStreamReader(stream, "UTF-8");
    char[] buffer = new char[length];
    reader.read(buffer);
    return new String(buffer);
}

And I'm calling the downloadContent method using below code:

URL u = new URL("http://localhost:59524/api/Test/AAA?id=1");
                ContentValues c = new ContentValues();
                c.put("id", "1");
                NetworkCommunication.downloadContent(u, c);

I've also tried changing the URL to http://localhost:59524/api/Test/AAA

And I made an asp.net MVC API using C# (In visual studio) for testing, and here's the code for the API:

public class TestController : ApiController
{
    [AcceptVerbs("GET", "POST")]
    public IHttpActionResult AAA(int id)
    {
        return Ok("Very good!");
    }
}

I am able to access the API through the browser: enter image description here

But why in android studio, the program failed to connect?

java.net.ConnectException: failed to connection to localhost/127.0.0.1 (port 59524) after 15000ms: ECONNREFUSED (Connection refused)

The above IOException throws in conn.connect();

Expected result:

When I post the "ID" to http://localhost:59524/api/Test/AAA, I should receive a string "Very good!"

4
  • Have you enables cors server side? Commented Oct 23, 2015 at 10:14
  • 2
    Localhost is not the same if you are using an emulator, or if you are using your mobile phone, make sure your phone connected to the same wifi network. If that doesn't work, try using the local IP address of the computer that's running the webservice. Make sure the device/emulator are connected to the safe internet network as your webservice. Your local IP address can be found by running ipconfig in console if you have windows, under "IPv4 address". Commented Oct 23, 2015 at 10:14
  • the ip address with the port number too Commented Oct 23, 2015 at 10:15
  • @nbokmans Seems this is the problem.. I will give it a try next friday when I get back to office... Commented Oct 26, 2015 at 2:30

1 Answer 1

1

use Soap webservice to call the asp.net web service.

My WebSrevice.java class code

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.R.array;
import android.util.Log;

public class WebService {
    //Namespace of the Webservice - can be found in WSDL
    private static String NAMESPACE = "http://tempuri.org/";

    //Webservice URL - WSDL File location   
    private static String URL = "webservice path";

    //Make sure you changed IP address
    //SOAP Action URI again Namespace + Web method name
    private static String SOAP_ACTION = "http://tempuri.org/";

    public static String invokeCategory( String webMethName, String compId) {
        String loginStatus = "";

        // Create request
        SoapObject request = new SoapObject(NAMESPACE, webMethName);

        // Property which holds input parameters
        PropertyInfo compidPI = new PropertyInfo();

        // Set Username
        compidPI.setName("companyid");

        // Set Value
        compidPI.setValue(compId);

        // Set dataType
        compidPI.setType(String.class);

        // Add the property to request object
        request.addProperty(compidPI);

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
            SoapEnvelope.VER11);
        envelope.dotNet = true;

        // Set output SOAP object
        envelope.setOutputSoapObject(request);

        // Create HTTP call object
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

        try {
            // Invoke web service
            androidHttpTransport.call(SOAP_ACTION+webMethName, envelope);

            // Get the response
            SoapPrimitive response = (SoapPrimitive) envelope.getResponse();

            // Assign it to  boolean variable variable
            loginStatus = response.toString();

        } catch (Exception e) {
            //Assign Error Status true in static variable 'errored'
            Login.errored = true;
            e.printStackTrace();
        } 

        //Return booleam to calling object
        return loginStatus;
    } 
}

My asynchtask class

private class GetCategoryAndProduct extends AsyncTask<String,Void,Void>  
{
    @Override
    protected Void doInBackground(String... params) {
        //Call Web Method
        data =(WebService.invokeCategory("getCategory",company_id,"0"));
        return null;
    }

    @Override
    //Once WebService returns response
    protected void onPostExecute(Void result) {
        //get server response here

        }
        }
    }
    @Override
    protected void onPreExecute() {

    }

}

My Asp.net webservice code

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

public class Login_Service : System.Web.Services.WebService
{   
     [WebMethod]
     public string getCategory(string companyid)
     {
        //write your web service code here

     }
 }

feel free to comment here

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.