2017-04-19 51 views
1

我需要使用javascript函數從我的html頁面獲取返回值。 我總是有這樣做在PHP代碼中使用回聲,它的工作原理,但現在它對我來說很困難,因爲我不知道如何使用HTML和JavaScript這是JavaScript代碼(我想獲得Json對象爲返程):如何使用httpresponse從html中將值返回到android java類中

<?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.androidhive.materialdesign.BackgroudWorker; 

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

import android.content.Context; 
import android.os.AsyncTask; 

import com.google.android.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.androidhive.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/android_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){ 

      } 
    } 



} 

普萊斯幫我...我真的不知道我應該做的。

回答

0

我強烈建議不要將HTML讀取到文件中,並嘗試將其作爲傳統文件讀取,因爲Java平臺的庫使得它變得更容易。

http://unirest.io/java.html

這個庫允許JSON響應反序列化到您所選擇的對象,會是這個樣子:

*創建一個類的數據進行反序列化爲

public class busLocation 
{ 
    double lat; 
    double long; 
} 

*獲取響應和反序列化

這部分我不能這樣做,因爲我不完全瞭解喲您的查詢已完成,但所提供的鏈接顯示瞭如何形成這些查詢的示例。

+0

我不使用任何查詢,代碼是gMaps webService的請求;( –

+0

在您的問題中有太多的代碼,我發現很難確切地知道您需要什麼幫助。 –