2013-07-14 2 views
1

Привет всем, я пытаюсь открыть один URL-адрес, используя поток в активности при нажатии кнопки. Я готовлю один поток в методе onClick. Я написал код. он работает, но в ответ я не получаю ответ правильно. Он должен вернуть ответ JSON, но его возвращающая половина строки. Мой кодUrlConection не получает ответ JSON

@Override 
public void onClick(View arg0) { 
    new Thread(new Runnable() { 

     @Override 
     public void run() { 

      try { 
       url = new URL("https://api.metwit.com/v2/weather/?location_lat=22.03&location_lng=75.65"); 
       URLConnection conn = url.openConnection(); 
       BufferedReader br = new BufferedReader(
          new InputStreamReader(conn.getInputStream())); 

       String inputLine; 
       while ((inputLine = br.readLine()) != null) { 
        s.append(inputLine); 

       } 
       //br.close(); 
       Log.i("####$$$", s.toString()); 
       JSONObject jsonObject = new JSONObject(s.toString()); 

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

     } 


    }).start(); 

} 

и я получаю ответ, как

{"objects": [{"weather": {"status": "partly cloudy", "measured": {"wind_speed": 2.056, "wind_direction": 240.0, "temperature": 316.0, "humidity": 8}}, "timestamp": "2013-07-13T08:07:47.397932", "sun_altitude": 1.309306025505066, "geo": {"type": "Point", "coordinates": [75.65, 22.03]}, "icon": "https://api.metwit.com/v2/icons/partly_sunny"}, {"sources": ["weatherbug", "wwo", "meteoblue"], "weather": {"status": "cloudy", "measured": {"wind_speed": 5, "wind_direction": 280, "temperature": 300, "humidity": 76}}, "timestamp": "2013-07-13T09:00:00", "sun_altitude": 1.0995509624481201, "geo": {"type": "Point", "coordinates": [75.5859375, 21.97265625]}, "icon": "https://api.metwit.com/v2/icons/cloudy"}, {"sources": ["weatherbug", "wwo", "meteoblue"], "weather": {"status": "rainy", "measured": {"wind_speed": 5, "wind_direction": 280, "temperature": 300, "humidity": 76}}, "timestamp": "2013-07-13T12:00:00", "sun_altitude": 0.38399845361709595, "geo": {"type": "Point", "coordin 

что не так я не получаю.

+0

ли вы пытаетесь подключиться URL в адресной строке браузера. Каков был ответ? – Tugrul

+0

Да, я попробовал в браузере, я получил правильный ответ. –

+0

Я также пробовал использовать java-код в другом проекте java, и получил правильный ответ. –

ответ

1

Вы можете попробовать библиотеку android-query, тогда это легко.

 AQuery aq = new AQuery(this); 
    aq.ajax("https://api.metwit.com/v2/weather/?location_lat=22.03&location_lng=75.65", 
      JSONObject.class,new AjaxCallback<JSONObject>(){ 

      @Override 
      public void callback(String url, JSONObject object, AjaxStatus status) 
      {  
      String ret = object.toString(); 
      System.err.println(ret); 
      } 

    }); 

Это решение отлично подходит для меня.

2

Вы можете использовать droidQuery обрабатывать все:

$.with(myButton).click(new Function() { 
    @Override 
    public void invoke($ droidQuery, Object... params) { 
     $.ajax(new AjaxOption().url("https://api.metwit.com/v2/weather/?location_lat=22.03&location_lng=75.65") 
           .type("GET") 
           .dataType("JSON") 
           .context(droidQuery.context()) 
           .success(new Function() { 
            @Override 
            public void invoke($ droidQuery, Object... params) { 
             JSONObject json = (JSONObject) params[0]; 
             droidQuery.toast(json.toString(), Toast.LENGTH_SHORT); 
             //If you want to simplify parsing, consider using: 
             Map<String, ?> data = $.map(json); 
             //TODO continue parsing 
            } 
           }) 
           .error(new Function() { 
            @Override 
            public void invoke($ droidQuery, Object... params) { 
             droidQuery.alert("ERROR: " + (String) params[2]); 
            } 
           })); 
    } 
}); 
Смежные вопросы