2012-05-29 4 views
0

Я пытаюсь вызвать этот URL с андроидом HttpGet иметь JSon массив направлений: http://maps.googleapis.com/maps/api/directions/json?origin=Adelaide,SA&destination=Adelaide,SA&waypoints=optimize:true%7cBarossa+Valley,SA%7cClare,SA%7cConnawarra,SA%7cMcLaren+Vale,SA&sensor=false "ошибки при вызове HttpGet в андроиде (получить направления Google)

В основном это то, что я сделал до сих пор:

1) Я первый создал AsyncTask, чтобы вызвать направления Google и войти результат извлеченный:

public class MyTask extends AsyncTask<String, Integer, String> { 

@Override 
protected String doInBackground(String... params) { 

InputStream is = null; 

    String result = null; 

try{ 

     HttpClient httpclient = new DefaultHttpClient(); 
     HttpGet httpget = new HttpGet(params[0]); 
     HttpResponse response = httpclient.execute(httpget); 
     HttpEntity entity = response.getEntity(); 
     int lenght = (int) entity.getContentLength(); 

     StringBuffer buffer = new StringBuffer(lenght); 

     is = entity.getContent(); 
     }catch(Exception e){ 
      Log.e("log_tag", "Error in http connection"+e.toString()); 
     } 

    try{ 
     BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 

     StringBuilder sb = new StringBuilder(); 
     sb.append(reader.readLine() + "\n"); 

     String line="0"; 
     while ((line = reader.readLine()) != null) { 
         sb.append(line + "\n"); 
      } 
      is.close(); 
     result = sb.toString(); 
      }catch(Exception e){ 
       Log.e("log_tag", "Error converting result "+e.toString()); 
      } 

    Log.i("Result", result); 


    return result; 



    } 


} 

2) в основной деятельности, я заставлю выполнить асинхронную задачу передавая ему URL :

MyTask t = new MyTask(); 
    t.execute(urlString.toString()); 

где urlString является StringBuilder. Я попытался построить этот адрес несколькими способами, даже пытаясь кодировать его с помощью URLEncoder.encode (myUrl), но я всегда получаю исключение, которое равно Ошибка в http connectionjava.lang.NegativeArraySizeException и я могу Извлеките json-данные из Google. Как правильно отформатировать этот URL-адрес? Моя цель - добиться того же результата, что и этот парень (в json part): http://blog.synyx.de/2010/06/routing-driving-directions-on-android-part-1-get-the-route/

Спасибо!

+0

Stacktrace в logcat должен указывать на строку, в которой он терпит неудачу, p –

+0

Ну, это указывает на следующую строку StringBuffer buffer = new StringBuffer (длина); поэтому кажется, что ответ от httpget пуст (вероятно, из-за плохого отформатированного запроса!). – jiraya85

+0

однако он еще не работает! – jiraya85

ответ

1

Я, наконец, понял! Я изменил способ вызова веб-службы google. В основном эта часть:

 HttpClient httpclient = new DefaultHttpClient(); 
    HttpGet httpget = new HttpGet(params[0]); 
    HttpResponse response = httpclient.execute(httpget); 
    HttpEntity entity = response.getEntity(); 

с этим другим способом называть Google WebService:

 HttpURLConnection urlConnection = null; 
     url = new URL("http://maps.googleapis.com/maps/api/directions/json?origin=Adelaide,SA&destination=Adelaide,SA&waypoints=optimize:true%7cBarossa+Valley,SA%7cClare,SA%7cConnawarra,SA%7cMcLaren+Vale,SA&sensor=false"); 
     urlConnection = (HttpURLConnection) url.openConnection(); 
     urlConnection.setRequestMethod("GET"); 
     urlConnection.setDoOutput(true); 
     urlConnection.setDoInput(true); 
     is = urlConnection.getInputStream(); 
     urlConnection.connect(); 

, а затем я «прикован» входной поток внутри InputStreamReader, в InputStreamReader внутри буферного Reader, и все работает штраф:

 InputStreamReader inputStream = new InputStreamReader(is); 
     BufferedReader r = new BufferedReader(inputStream); 
     String line = null; 
     line = r.readLine(); 
     while (line!=null){ 

      Log.i("RESULT", line); 

      line = r.readLine(); 

     } 

Таким образом, я могу записать желаемый результат. Одна вещь, которую я хотел бы понять, - это почему httpclient не работает, но вместо этого работает httpURLConnection. Может кто-нибудь мне помочь?

0

Просто удалите проблемный код, так как он не используется нигде?

//int lenght = (int) entity.getContentLength(); 

//StringBuffer buffer = new StringBuffer(lenght);