2016-11-05 94 views
0

主要問題是我無法返回兩個值幫助。我嘗試了很多時間,但沒有成功。而且我對這個新手很感興趣,所以請提前寫下你的答案,關於我的代碼。如何使用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://stackoverflow.com/help/how-to-ask)節ELP。只包含相關的代碼,而不是整個代碼轉儲。 –

回答

0

你不應該嘗試所有東西都塞進一個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它工作正常 –

相關問題