3

In my code I am getting data from a URL. When the URL contains spaces it works fine in the browser but when I acces through the applicaiton is shows error due to spaces in the URL.

My logcat is below.

http://XXX.XX.XX.XX/~school/index.php/api/index/getschools?mg=Pre-Ks and CDC Lunch  
 menu&sl=Elementary


              try {

        HttpClient client = new DefaultHttpClient();
        HttpConnectionParams
                .setConnectionTimeout(client.getParams(), 15000);
        HttpConnectionParams.setSoTimeout(client.getParams(), 15000);
        HttpUriRequest request = new HttpGet(SelectMenuAPI);
        HttpResponse response = client.execute(request);
        InputStream atomInputStream = response.getEntity().getContent();
        BufferedReader in = new BufferedReader(new InputStreamReader(
                atomInputStream));

        String line;
        String str = "";
        while ((line = in.readLine()) != null) {
            str += line;
        }






        }



    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        // IOConnect = 1;
        e.printStackTrace();
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
  }















               /AndroidRuntime(4885): FATAL EXCEPTION: main
 E/AndroidRuntime(4885): java.lang.RuntimeException: Unable to start activity  
 ComponentInfo{com.schoollunchapp/com.schoollunchapp.SecondStep}:    
java.lang.IllegalArgumentException: Illegal character in query at index 69: 
http://XXX.XX.XX.XX/~school/index.php/api/index/getschools?mg=Pre-Ks and CDC Lunch 
  menu&sl=Elementary

08-23 00:46:18.174: E/AndroidRuntime(4885):     at    
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)

08-23 00:46:18.174: E/AndroidRuntime(4885):     at 
  android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)

08-23 00:46:18.174: E/AndroidRuntime(4885):     at   
 android.app.ActivityThread.access$2300(ActivityThread.java:125)
  08-23 00:46:18.174: E/AndroidRuntime(4885):   at  
 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)

 08-23 00:46:18.174: E/AndroidRuntime(4885):    at     
 android.os.Handler.dispatchMessage(Handler.java:99)
  08-23 00:46:18.174: E/AndroidRuntime(4885):   at  \    
  android.os.Looper.loop(Looper.java:123)
   08-23 00:46:18.174: E/AndroidRuntime(4885):  at  
   android.app.ActivityThread.main(ActivityThread.java:4627)
  08-23 00:46:18.174: E/AndroidRuntime(4885):   at  
   java.lang.reflect.Method.invokeNative(Native Method)
   08-23 00:46:18.174: E/AndroidRuntime(4885):  at  
   java.lang.reflect.Method.invoke(Method.java:521)
     08-23 00:46:18.174: E/AndroidRuntime(4885):    at  
  com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)

  08-23 00:46:18.174: E/AndroidRuntime(4885):   at    
 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
 08-23 00:46:18.174: E/AndroidRuntime(4885):    at     
 dalvik.system.NativeStart.main(Native Method)

 08-23 00:46:18.174: E/AndroidRuntime(4885): Caused by:   
 java.lang.IllegalArgumentException: Illegal character in query at index 69:  
 http://XXX.XX.XX.XX/~school/index.php/api/index/getschools?mg=Pre-Ks and CDC Lunch  
 menu&sl=Elementary
 08-23 00:46:18.174: E/AndroidRuntime(4885):    at    
  java.net.URI.create(URI.java:970)
  08-23 00:46:18.174: E/AndroidRuntime(4885):   at  
 org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:75)

 08-23 00:46:18.174: E/AndroidRuntime(4885):    at  
 com.schoollunchapp.SecondStep.parseJSONData(SecondStep.java:119)

 08-23 00:46:18.174: E/AndroidRuntime(4885):    at   
   com.schoollunchapp.SecondStep.onCreate(SecondStep.java:96)

    08-23 00:46:18.174: E/AndroidRuntime(4885):     at    
  android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
 08-23 00:46:18.174: E/AndroidRuntime(4885):    at  
  android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
sealz
  • 5,348
  • 5
  • 40
  • 70
user2706686
  • 77
  • 2
  • 6

2 Answers2

4

Try this line:

String URL = URLEncoder.encode("URL", "UTF-8");

or

String URL = URL.replace(" ", "%20");

Hope it Helps!!

Armaan Stranger
  • 3,140
  • 1
  • 14
  • 24
2

Replace your spaces with %20 with the android .replace call.

String stringurl = "http://mysite.com/pictures of stuff";
stringurl = stringurl.replace(" ", "%20");

URLs do not like spaces and the filler will get rid of your problems. It is a good habit to get into doing this as well as creating site directories with as little to no space as possible.

There are other characters that URLs hate and are replaced with %#'s. This is due to percent encoding and an example and writeup can be found on this SO post.

Community
  • 1
  • 1
sealz
  • 5,348
  • 5
  • 40
  • 70