I need a help with some networking.
What i am trying to do is to send request to servlet from android and then servlet sends the response back to me.
Here is my code
GSP Client Activity
package com.gps.gpsclient;
import microsoft.mappoint.TileSystem;
import org.osmdroid.api.IProjection;
import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapController;
import org.osmdroid.views.MapView;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class GPSClientActivity extends Activity {
private MapView view;
private MapDrawer mainDrawer;
private Intent intent;
private MapController mapController;
private static final String RequestorUrl="http://192.168.1.104:8080/Requestor/RQSRV";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gps);
view = (MapView) findViewById(R.id.mapView);
view.setTileSource(TileSourceFactory.MAPNIK);
view.setBuiltInZoomControls(true);
mapController = view.getController();
mapController.setZoom(10);
GeoPoint point2 = new GeoPoint(51496994, -134733);
mapController.setCenter(point2);
mainDrawer=new MapDrawer(view);
final Button button = (Button) findViewById(R.id.addButton);
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
intent=new Intent(GPSClientActivity.this,WaypointSetupActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivityForResult(intent,1);
return false;
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK)
{
final MapPoint point=(MapPoint) data.getSerializableExtra("result");
GeoPoint point2 = new GeoPoint(51496994, -134254);
point.setGeo(point2);
view.setOnTouchListener(new View.OnTouchListener()
{
boolean added=false;
@Override
public boolean onTouch(View v, MotionEvent e)
{
if(!added)
{
IProjection project = view.getProjection();
final GeoPoint geo = (GeoPoint)project.fromPixels((int)e.getX(),(int)e.getY());
mainDrawer.addGeopointToMap(point.getName(), point.getDesc(), geo);
added=true;
Toast.makeText(view.getContext(), "Waypoint "+point.getName()+" was added to Map ", Toast.LENGTH_LONG).show();
DBAccessManager manager=new DBAccessManager();
manager.AddWaypointToDb(point.getName(), point.getDesc(), 1, 1, geo.getLatitudeE6(), geo.getLongitudeE6());
}
return false;
}});
}
}
}
DBAccessManager class
package com.gps.gpsclient;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.concurrent.ExecutionException;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import android.os.AsyncTask;
public class DBAccessManager extends AsyncTask <DBManagerParams, Void,String>
{
//public static final String Url="http://192.168.1.104:8080/Requestor/RQSRV";
public static final String Url="http://158.193.82.6:8080/Requestor/RQSRV";
public DBAccessManager()
{
}
public void AddWaypointToDb(String name,String desc,int Type,int Priority,long Latitude,long Longtitude)
{
String[] headers=new String[10];
String[] headers_values=new String[10];
headers[0]="type of command";
headers_values[0]="insert waypoint";
headers[1]="name";
headers_values[1]=name;
headers[2]="decription";
headers_values[2]=desc;
headers[3]="type";
headers_values[3]=Integer.toString(Type);
headers[4]="priority";
headers_values[4]=Integer.toString(Priority);
headers[5]="latitude";
headers_values[5]=Long.toString(Latitude);
headers[6]="longtitude";
headers_values[6]=Long.toString(Longtitude);
String response = null;
DBManagerParams params=new DBManagerParams(Url,headers,headers_values);
try
{
response=execute(params).get();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
catch (ExecutionException e) {
e.printStackTrace();
}
System.out.println(response);
}
private String readOutput(InputStream in)
{
StringBuffer outputBuffer = new StringBuffer("");
try
{
BufferedReader buffer = new BufferedReader(new InputStreamReader(in));
String s = "";
while ((s = buffer.readLine()) != null)
outputBuffer.append(s);
}
catch (IOException e)
{
e.printStackTrace();
}
return outputBuffer.toString();
}
private InputStream getHttpOutConnection(String urlString,String[] headers,String[]header_values) {
InputStream stream=null;
URL url = null;
try {
url = new URL(urlString);
System.out.println(""+urlString);
URLConnection connection= url.openConnection();
HttpURLConnection httpConnection = (HttpURLConnection) connection;
httpConnection.setDoOutput(true);
httpConnection.setDoInput(true);
httpConnection.setRequestMethod("POST");
if (headers.length !=header_values.length)
{
System.err.println("Bad use of headers in :"+this.getClass().toString()+" Method: "+ this.getClass().getEnclosingMethod().getName());
}
else
{
for(int i =0;i<headers.length;i++)
{
if (headers[i]!=null)
httpConnection.setRequestProperty(headers[i], header_values[i]);
}
httpConnection.setReadTimeout(10000 /* milliseconds */);
httpConnection.setConnectTimeout(15000 /* milliseconds */);
httpConnection.setDoInput(true);
httpConnection.connect();
if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
System.out.println("HTTP OK");
stream=httpConnection.getInputStream();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return stream;
}
@Override
protected String doInBackground(DBManagerParams... params) {
String response;
response=readOutput(getHttpOutConnection(params[0].URL,params[0].headers,params[0].headers_values));
return response;
}
}
class DBManagerParams
{
String URL;
String[]headers;
String[]headers_values;
String response;
DBManagerParams(String URL,String[]headers,String[]headers_values)
{
this.URL=URL;
this.headers=headers;
this.headers_values=headers_values;
}
}
Servlet side
package Applications;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "/RQSRV", urlPatterns = {"/RQSRV"})
public class RQSRV extends HttpServlet {
private static final long serialVersionUID = 1L;
private DBConnectionManager DBmanager;
public RQSRV() {
super();
DBmanager=new DBConnectionManager();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
System.out.println("Get was called");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
if (response.getHeader("type of command").equals("insert waypoint"))
{
String name,desc;
int type,prio;
long latitude,longtitude;
name=response.getHeader("name");
desc=response.getHeader("description");
type=Integer.parseInt(response.getHeader("type"));
prio=Integer.parseInt(response.getHeader("priority"));
latitude=Long.parseLong(response.getHeader("latitude"));
longtitude=Long.parseLong(response.getHeader("longtitude"));
DBmanager.Connect();
String command="insert into waypoints values("+(DBmanager.getMaxWaypointId()+1)+",0,"+name+","+desc+","+prio+","+latitude+","+longtitude+")";
DBmanager.ExecuteQueryWithoutResults(command);
}
}
}
App stops working while i call httpConnection.connect()
.
It is just trying to connect and then after a while it stops on connection timeout.
Things i check:
- Servlet is running, and it's accesible from Web Browser
- All firewals are stopped
- Url of servlet is right
I hope you know what it should be