如何使用asyncTask解析来自多个URL的数据

问题描述:

主要问题是我无法返回两个值帮助。我尝试了很多时间,但没有成功。而且我对这个新手很感兴趣,所以请提前写下你的答案,关于我的代码。如何使用asyncTask解析来自多个URL的数据

这里是我的代码

public class calculate extends AsyncTask<String, String, String> { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
     } 

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

      try { 
       uss = getJson("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22INRUSD%22)&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback="); 
       JSONObject usjObj; 
       usjObj = new JSONObject(uss); 
       usResult = usjObj.getJSONObject("query").getJSONObject("results").getJSONObject("rate").getString("Rate"); 


       eurr = getJson("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22INREUR%22)&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback="); 
       JSONObject eurjObj; 
       eurjObj = new JSONObject(eurr); 
       eurResult = eurjObj.getJSONObject("query").getJSONObject("results").getJSONObject("rate").getString("Rate"); 
      } catch (JSONException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (ClientProtocolException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      return eurResult + usResult; 
      ////PROBLEM IS HERE ACTUALLY I DON'T KNOW HOW TO RETURN TWO OR MORE VALUE/////" 
     } 

     @Override 
     protected void onPostExecute(String usResult) { 
      valueus = Double.parseDouble(usResult); 
      inputus = lengthvalue * valueus; 
      us.setText("" + inputus); 

      valueeur = Double.parseDouble(eurResult); 
      inputeur = lengthvalue * valueeur; 
      eur.setText("" + inputeur); 
     } 

    } 


    public String getJson(String url) throws ClientProtocolException, IOException { 

     StringBuilder build = new StringBuilder(); 
     HttpClient client = new DefaultHttpClient(); 
     HttpGet httpGet = new HttpGet(url); 
     HttpResponse response = client.execute(httpGet); 
     HttpEntity entity = response.getEntity(); 
     InputStream content = entity.getContent(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(content)); 
     String con; 
     while ((con = reader.readLine()) != null) { 
      build.append(con); 
     } 
     return build.toString(); 
    } 
} 
+0

首先,你需要学习,要写出好的问题 - 不要阅读H [如何提问](http://*.com/help/how-to-ask)节ELP。只包含相关的代码,而不是整个代码转储。 –

你不应该尝试所有东西都塞进一个String。还有更好的数据结构来容纳多个值:数组,向量,列表等声明你AsyntTask为:

public class calculate extends AsyncTask<String, String, String[]> 

,然后你doInBackgorund的方法是这样的:

@Override 
protected String doInBackground(String... params) { 
    String[] result = new String[numResults]; 

    ... 
    result[0] = usjObj.getJSONObject("query").getJSONObject("results").getJSONObject("rate").getString("Rate"); 

    ... 
    result[1] = usjObj.getJSONObject("query").getJSONObject("results").getJSONObject("rate").getString("Rate"); 

    ... 

    return result; 
} 

最后您onPostExecute

@Override 
protected void onPostExecute(String[] usResult) { 
    ... 
} 
+0

谢谢你告诉我在哪里添加我的网址 –

+0

你必须自己弄清楚。 –

+0

谢谢Aleks它工作正常 –