如何在安卓设备中向服务器发送数据。

4

我希望在我的应用程序中循环发送经纬度。以下是使用GPS获取这些参数的功能。

 private void showLocation(Location location) {
    String latitude = "Latitude: ";
    String longitude = "Longitude: ";

    if (location != null) {
        latitude += location.getLatitude();
        longitude += location.getLongitude();
}
}

我在网上寻找方法,找到了一些但它们已经过时且无法使用。

public void sendData(double latitude, double longitude){
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://192.x.x.x:8080/run/mypage.php");
    try {
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);

        nameValuePairs.add(new BasicNameValuePair("Latitude", Double.toString(latitude)));
        nameValuePairs.add(new BasicNameValuePair("Longitude", Double.toString(longitude)));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        httpclient.execute(httppost);

    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
    } catch (IOException e) {
        // TODO Auto-generated catch block
    }
}

你的问题是获取位置还是将其发布到服务器上? - Debosmit Ray
posting it to the server - woochuck
1个回答

1

我建议您使用OkHttp库进行网络编程。您的示例可能如下所示

private final OkHttpClient client = new OkHttpClient(); 

public String sendData(double latitude, double longitude){
    try {
        RequestBody formBody = new FormBody.Builder()
                .add("Latitude", Double.toString(latitude))
                .add("Longitude", Double.toString(longitude))
                .build();

        Request request = new Request.Builder()
                .url("http://httpbin.org/post")
                .post(formBody)
                .build();

        Response response = client.newCall(request).execute();
        return response.body().string();
    } catch (IOException e) {
        return "Error: " + e.getMessage();
    }
}

不要忘记在 AsyncTask 中运行网络编程代码。
class IOAsyncTask extends AsyncTask<Location, Void, String> {

    @Override
    protected String doInBackground(Location... params) {
        return sendData(params[0].getLatitude(), params[0].getLongitude());
    }

    @Override
    protected void onPostExecute(String response) {
        Log.d("networking", response);
    }
}

这可能是您的活动的onCreate方法。
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Location current = new Location("");
    current.setLatitude(23.9569596);
    current.setLongitude(12.567567);

    new IOAsyncTask().execute(current);
}

请注意,我使用 http://httpbin.org/post 作为远程地址,您必须用您的终端URL进行替换。在我的情况下,响应是:
{
 "args": {}, 
 "data": "", 
 "files": {}, 
 "form": {
   "Latitude": "23.9569596", 
   "Longitude": "12.567567"
 }, 
 "headers": {
   "Accept-Encoding": "gzip", 
   "Content-Length": "39", 
   "Content-Type": "application/x-www-form-urlencoded", 
   "Host": "httpbin.org", 
   "User-Agent": "okhttp/3.0.1"
 }, 
 "json": null, 
 "origin": "xxx.xx.xxx.xx", 
 "url": "http://httpbin.org/post"
}

你好,感谢您的帮助,但我在以下代码行遇到了另一个问题: RequestBody formBody = new FormBody.Builder()Android Studio 显示无法解析方法 'FormBody'。 - woochuck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接