Java HttpConnection可以';android中的t连接
我需要一个网络方面的帮助 我试图做的是从android向servlet发送请求,然后servlet将响应发送回我 这是我的密码 普惠制客户活动Java HttpConnection可以';android中的t连接,java,android,servlets,Java,Android,Servlets,我需要一个网络方面的帮助 我试图做的是从android向servlet发送请求,然后servlet将响应发送回我 这是我的密码 普惠制客户活动 package com.gps.gpsclient; import microsoft.mappoint.TileSystem; import org.osmdroid.api.IProjection; import org.osmdroid.tileprovider.tilesource.TileSourceFactory; import org.o
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类
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;
}
}
当我调用httpConnection.connect()时,应用程序停止工作
它只是尝试连接,然后在连接超时时停止
我检查的东西:
- Servlet正在运行,可以从Web浏览器访问它
- 所有的火柴都停止了
- servlet的Url是正确的
我希望您知道在您的服务器servlet端应该是什么,您正在使用“response”获取Android发送的数据?
获取数据是“请求”
您是否在清单文件中添加了Wifi/Internet权限?AsyncTask.execute(params).get()
@Selvin为什么这是个坏主意?使用AsyncTask.get()
就像根本不使用AsyncTask
。。。它使操作再次同步(使用回调等待结果)…因为AsyncTask与进程是异步的,所以必须使用postExecuted作为回调任务,而不是get()但这不是一个线索,因为它没有连接到sevlet,所以servlet中的代码现在在android代码中无法访问:您收到超时或无法访问的错误连接?超时当我设置超时时间时,您尝试使用FIREFOX、CHROME从PC打开web?别担心,它们是常见错误。
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);
}
}
}
if (request.getHeader("type of command")!=null && request.getHeader("type of command").equals("insert waypoint"))
{
String name,desc;
int type,prio;
long latitude,longtitude;
name=request.getHeader("name");
desc=request.getHeader("description");
type=Integer.parseInt(request.getHeader("type"));
prio=Integer.parseInt(request.getHeader("priority"));
latitude=Long.parseLong(request.getHeader("latitude"));
longtitude=Long.parseLong(request.getHeader("longtitude"));
DBmanager.Connect();
String command="insert into waypoints values("+(DBmanager.getMaxWaypointId()+1)+",0,"+name+","+desc+","+prio+","+latitude+","+longtitude+")";
DBmanager.ExecuteQueryWithoutResults(command);
//important send status ok to ANDROID to prevent timeout.
response.setStatus(HttpServletResponse.SC_OK);
}else{
//important send status ok to ANDROID to prevent timeout.
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
}