有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javascript如何使用httpresponse将值从html返回到安卓 java类

我需要使用javascript函数从我的html页面获取返回。 我总是在php代码中使用echo来实现这一点,而且很有效,但现在对我来说很困难,因为我不知道如何使用html和javascript实现这是javascript代码(我想获取Json对象作为返回):

<?php
    $Via = $_GET["Via"];

  ?>
  <p id=Via name = Via> </p>
  <script>

       var Via = '<?php echo $Via; ?>';


       setTimeout(init(),1);

       function init()
       {

         setTimeout( function(){initMapi(); },100);

       }


       function initMapi() {

         var geocoder = new google.maps.Geocoder();

         var latlng = geocodeAddress(geocoder,Via + ",Trieste");



       }

       function geocodeAddress(geocoder,address) {

         geocoder.geocode({'address': address}, function(results, status) {

           if (status === 'OK') {


           } else {
             alert('Geocode was not successful for the following reason: ' + status);
           }
           var latitude  = results[0].geometry.location.lat().toFixed(5);
           var longitude = results[0].geometry.location.lng().toFixed(5);


           var latlng = {lat: parseFloat(latitude), lng: parseFloat(longitude)};
           var coord = '[{"lat":' + latitude + '},{"lng":' + longitude + '}]';
           var arr = JSON.parse(coord);
           document.getElementById('Via').innerHTML = coord;
           return coord;
         });
       }

       function geocodeLatLng(geocoder , latlng) {

           geocoder.geocode({'location': latlng } , function(results, status) {
             if (status === 'OK') {
               if (results[0]) {

                 document.getElementById('Via').value = mysql_real_escape_string(results[0].formatted_address);

               } else {
                 window.alert('No results found');
               }
             } else {
               window.alert('Geocoder failed due to: ' + status);
             }
           });
         }


       </script>
       <script async defer
       src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB6m6fhBX0vIYDPoDJQTTUPefbFpsvYs6w">
       </script>

然后是我的Android类:

    package info.安卓hive.materialdesign.BackgroudWorker;

/**
 * Created by Alessandro on 27/02/2017.
 */

import 安卓.content.Context;
import 安卓.os.AsyncTask;

import com.google.安卓.gms.maps.model.LatLng;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URL;
import java.net.URLEncoder;

import info.安卓hive.materialdesign.utility.Bus;
import xdroid.toaster.Toaster;


public class BackgroundWorkerConvertAddressIntoLatLng extends AsyncTask<String,Void,String> {
    Context context;

    public boolean next = false;
    public Bus bus ;
    public String street ;
    public LatLng coords = null;
    public BackgroundWorkerConvertAddressIntoLatLng(Context ctx, Bus bus,String street) {
        context = ctx;
        this.street = street;
        this.bus = bus;
    }
    @Override
    protected String doInBackground(String... params) {
        if(params[0] == "coords" && bus.Nome_Linea.equals("29 Andata")) {
            manageBusses(params);
        }
        return null;
    }

    @Override
    protected void onProgressUpdate(Void... values) {
        super.onProgressUpdate(values);
    }

    public void manageBusses(String... params){

            try{
                String value=null;

                String link = "http://2.234.155.73/安卓_TT/getCoordinates.php?Via=" + URLEncoder.encode(street+ ", Trieste", "UTF-8")  ;

                URL url = new URL(link);
                HttpClient client = new DefaultHttpClient();

                HttpGet request = new HttpGet();

                request.setURI(new URI(link));

                HttpResponse response = client.execute(request);

                BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

                StringBuffer sb = new StringBuffer("");

                String line="";

                while (true) {
                    line = in.readLine();
                    if(line.contains("<p id")){
                        if(line.indexOf("<p id=Via name = Via></p>") == -1){
                            sb.append(line);
                            break;
                        }else{
                            in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                        }
                    }else {
                    }
                }
                value = sb.toString();
                in.close();
                Toaster.toast("string " + value);

                String json_string = EntityUtils.toString(response.getEntity());
                JSONArray jArray = new JSONArray(json_string);
               // JSONArray jArray = new JSONArray(value);
                // Extract data from json and store into ArrayList as class objects
                Toaster.toast("jArray " + jArray);

                for (int i = 0; i < jArray.length(); i++) {

                    JSONObject json_data = jArray.getJSONObject(i);
                    double lat = json_data.getDouble("lat");
                    double lng = json_data.getDouble("lng");
                    coords = new LatLng(lat,lng);
                    Toaster.toast("coords " + coords.toString());
                    next = true;
                }




            } catch(Exception e){

            }
    }



}

请帮助我。。。我真的不知道该怎么办


共 (1) 个答案

  1. # 1 楼答案

    我强烈建议不要将HTML读入文件并尝试将其作为常规文件来读取,因为Java平台上有一些库使这一过程变得非常简单

    http://unirest.io/java.html

    此库允许将json响应反序列化到您选择的对象中,如下所示:

    *为要反序列化到的数据创建一个类

    public class busLocation
    {
       double lat;
       double long;
    }
    

    *获取响应并反序列化

    这部分我不能做,因为我不完全理解您的查询是如何进行的,但提供的链接显示了如何形成这些查询的示例