Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java onLocationChange()-无法发送post请求_Java_Android - Fatal编程技术网

Java onLocationChange()-无法发送post请求

Java onLocationChange()-无法发送post请求,java,android,Java,Android,我正在创建简单的GPS跟踪器。应用程序获取gps纬度/经度并将其发送到远程服务器上的php @Override public void onLocationChanged(Location loc) { String infLat = Double.toString(loc.getLatitude()); String infLon = Double.toString(loc.getLongitude()); String Text = "My current locati

我正在创建简单的GPS跟踪器。应用程序获取gps纬度/经度并将其发送到远程服务器上的php

@Override

public void onLocationChanged(Location loc)
{
   String infLat = Double.toString(loc.getLatitude());
   String infLon = Double.toString(loc.getLongitude());

   String Text = "My current location is: " +
     "Latitud = " + infLat +
     "Longitud = " + infLon;

   Toast.makeText( getApplicationContext(),
                   Text,
                   Toast.LENGTH_SHORT).show();

   uploadLoc(infLat, infLon); // calling method which sends location info
}
这里是上传地址:

public void uploadLoc(String a, String b) {
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://link to script");

    try {

        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("latitude", a));
        nameValuePairs.add(new BasicNameValuePair("longitude", b));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);

    } catch (ClientProtocolException e) {
        //
    } catch (IOException e) {
       //
    }
}
public void uploadLoc(字符串a、字符串b){
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(“http://link (即);;
试一试{
List nameValuePairs=新的ArrayList(2);
添加(新的BasicNameValuePair(“纬度”,a));
添加(新的BasicNameValuePair(“经度”,b));
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
//执行HTTP Post请求
HttpResponse response=httpclient.execute(httppost);
}捕获(客户端协议例外e){
//
}捕获(IOE异常){
//
}
}

但我经常收到“应用程序已停止”。当我删除调用uploadLoc方法的行时,一切都正常,Toast会随着位置的变化而更新。这里有什么问题

将Http post放在单独的线程中

每次您试图将您的位置发布到远程服务器时,它都会花费一些时间,这最终可能会阻止您的
onLocationChanged(location loc)
执行,下次LocationListener调用它时

您可以尝试在每次收到位置更新时启动一个新线程,问题的解决方案是,根据您的位置更新接收频率,您可能会有这么多线程。但是,如果您每小时都请求位置更新,这可能不是一个坏主意

或者,您可以将所有网络投递请求放入一个队列中,并逐个处理。您甚至可以根据自己的需求使用或遵循其他设计模式套件


关键是异步处理网络操作,因为这样的操作需要时间,在这段时间内,它不会阻止其他要执行的关键操作

您确定没有看到NetworkOnMainThread异常吗?