2013-04-01 7 views
2

Я пытаюсь разобрать объект JSON. Значение на этом веб-сайте. Тем не менее, я получаю ошибку времени выполнения: невозможно запустить Activity componentinfo: Недопустимый символ в url .. Это мой код:java.lang.RuntimeException: Не удалось запустить активность ComponentInfo в Android

public class MainActivity extends ListActivity { 
    private static final String TAG_ROWS = "row"; 
    private static final String TAG_ELEMENTS = "elements"; 
    private static final String TAG_DISTANCE = "distance"; 
    private static final String TAG_VALUE = "value"; 
    private static final String TAG_ADDRESS = "destination_addresses"; 
    String data; 
    HttpClient client; 
    double minDistance=0; 
    static JSONObject jObj = null; 
    String destination_addresses; 
    JSONArray rows; 
    JSONArray elements; 
    String value; 
    final static String URL= "http://maps.googleapis.com/maps/api/distancematrix/json?"; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     try { 
      try { 
       ClosestObject(); 
      } catch (ClientProtocolException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (JSONException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
     finally { 

     } 
     setContentView(R.layout.activity_main); 
     TextView result = (TextView) findViewById(R.id.text1); 
      result.setText(data); 

    } 



public void ClosestObject() throws JSONException, ClientProtocolException, IOException { 

     // Creating JSON Parser instance 
    String param= "origins=Vancouver+BC&destinations=burnaby|Victoria+BC|Surrey+BC&mode=driving&language=en-FR&sensor=false"; 
    String encodedparams = URLEncoder.encode(param,"UTF-8"); 
    String FinalUrl= URL +encodedparams; 
    StringBuilder url = new StringBuilder(FinalUrl); 

    HttpGet get = new HttpGet(url.toString()); 

    HttpResponse r = client.execute(get); 
    HttpEntity en = r.getEntity(); 
    data = EntityUtils.toString(en); 
    jObj = new JSONObject(data); 


     try { 


      rows = jObj.getJSONArray(TAG_ROWS); 
      elements = rows.getJSONArray(0); 
      for (int i=0; i<elements.length();i++){ 
       JSONObject obj = elements.getJSONObject(i); 
       JSONObject distance = obj.getJSONObject(TAG_DISTANCE); 
        value= distance.getString(TAG_VALUE); 
        double distanceValue = Double.parseDouble(value); 
        if (distanceValue < minDistance){ 
         minDistance = distanceValue; 
        } 
      } 

     } 
     catch (JSONException e) { 
      e.printStackTrace(); 
     } 

} 



@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

Это ошибка: 04-01 21: 06: 05,734: D/AndroidRuntime (1045): Выключение ВМ 04-01 21: 06: 05.734: W/dalvikvm (1045): threadid = 1: выход из потока с неперехваченным исключением (группа = 0x40a71930) 04-01 21: 06: 05.764: E/AndroidRuntime (1045): FATAL EXCEPTION: main 04-01 21: 06: 05.764: E/AndroidRuntime (1045): java.lang.RuntimeException: не удается запустить активность ComponentInfo {com.example.distance/com.example.distance.MainActivity}: java.lang.IllegalArgumentException: Недопустимый символ в запросе по индексу 97: http://maps.googleapis.com/maps/api/distancematrix/json?origins=Vancouver+BC&destinations=burnaby|Victoria+BC|Surrey+BC&mode=driving&language=en-FR&sensor=falsehttp://maps.googleapis.com/maps/api/distancematrix/json?origins=Vancouver+BC&destinations=burnaby|Victoria+BC|Surrey+BC&mode=driving&language=en-FR&sensor=false 04-01 21: 06: 05.764: E/AndroidRuntime (1045): at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2180) 04-01 21: 06: 05.764 : E/AndroidRuntime (1045): at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2230) 04-01 21: 06: 05.764: E/AndroidRuntime (1045): at android.app.ActivityThread.access $ 600 (ActivityThread.java:141) 04-01 21: 06: 05.764: E/AndroidRuntime (1045): at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1234) 04-01 21: 06: 05.764: E/AndroidRuntime (1045): на android.os.Handler.dispa tchMessage (Handler.java:99) 04-01 21: 06: 05.764: E/AndroidRuntime (1045): at android.os.Looper.loop (Looper.java:137) 04-01 21: 06: 05.764: E/AndroidRuntime (1045): at android.app.ActivityThread.main (ActivityThread.java:5041) 04-01 21: 06: 05.764: E/AndroidRuntime (1045): в java.lang.reflect.Method.invokeNative (Native Method) 04-01 21: 06: 05.764: E/AndroidRuntime (1045): at java.lang.reflect.Method.invoke (Method.java:511) 04-01 21: 06: 05.764: E/AndroidRuntime (1045): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:793) 04-01 21: 06: 05.764: E/AndroidRuntime (1045): at com.android.internal.os .ZygoteInit.main (ZygoteInit.java:560) 04-01 21: 06: 05.764: E/AndroidRuntime (1045): at dalvik.system.NativeStart.main (родной метод) 04-01 21: 06: 05.764: E/AndroidRuntime (1045): вызвано: java.lang.IllegalArgumentException: недопустимый символ в запросе по индексу 97: http://maps.googleapis.com/maps/api/distancematrix/json?origins=Vancouver+BC&destinations=burnaby|Victoria+BC|Surrey+BC&mode=driving&language=en-FR&sensor=falsehttp://maps.googleapis.com/maps/api/distancematrix/json?origins=Vancouver+BC&destinations=burnaby|Victoria+BC|Surrey+BC&mode=driving&language=en-FR&sensor=false 04-01 21: 06: 05.764: E/AndroidRuntime (1045)): at java.net.URI.create (URI.java:727) 04-01 21: 06: 05.764: E/AndroidRuntime (1045): at org.apache.http.client.methods.HttpPost. (HttpPost. java: 79) 04-01 21: 06: 05.764: E/AndroidRuntime (1045): at com.example.distance.MainActivity $ JSONParser.getJSONFromUrl (MainActivity.java:68) 04-01 21: 06: 05.764: E/AndroidRuntime (1045): at com.example.distance.MainActivity.ClosestObject (MainActivity.java:115) 04-01 21: 06: 05.764: E/AndroidRuntime (1045): at com.example.distance.MainActivity. onCreate (MainActivity.java:44) 04-01 21: 06: 05.764: E/AndroidRuntime (1045): at android.app.Activity.performCreate (Activ ity.java:5104) 04-01 21: 06: 05.764: E/AndroidRuntime (1045): at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1080) 04-01 21: 06: 05.764: E/AndroidRuntime (1045): at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2144) 04-01 21: 06: 05.764: E/AndroidRuntime (1045): ...11 более

Я не могу тебя отблагодарить за помощь мне :)

ответ

3

IllegalArgumentException: недопустимый символ в запросе

означает, что вы не пропуская запрашивая String (параметры) с URL в правильном формате , используйте URLEncoder.encode для кодирования специальных символов перед добавлением в URL.

Пример:

String str_url="http://www.xxxxxx.com?"; 
String str_parameters = "param123=abc|test&param=abc test"; 
String encodedparams = URLEncoder.encode(str_parameters,"UTF-8"); 

String str_finalurl=str_url+encodedparams; 
+0

но это правильно ссылку ты http://maps.googleapis.com/maps/api/distancematrix/json?origins=Vancouver+BC&destinations=burnaby|Victoria+BC | Surrey + BC & mode = driving & language = en-FR & sensor = false – CanucksGirl

+0

@KarleeB: сначала используйте HttpGet вместо HttpPost, потому что текущий запрос получается вместо сообщения –

+0

Я просто сделал..има error..ugh – CanucksGirl

Смежные вопросы