2015-02-10 54 views
4

我有一個簡單的GWT應用程序需要從另一個服務器獲取一些JSON數據。我遵循了幾個教程來達到這一點。當我嘗試編譯它,我得到的錯誤與GWT使用JSONParser的問題

[錯誤] 44行:沒有源代碼可用於 型com.google.gwt.json.client.JSONValue;你忘了繼承 所需的模塊嗎? [錯誤]第44行:沒有源代碼可用於com.google.gwt.json.client.JSONParser類型;你忘了繼承 所需的模塊嗎? [錯誤]第46行:沒有源代碼可用於com.google.gwt.json.client.JSONArray類型;你忘了繼承 所需的模塊嗎? [錯誤]第49行:沒有源代碼可用於com.google.gwt.json.client.JSONObject類型;你忘了繼承 所需的模塊嗎?

我知道我不得不添加

<inherits name="com.google.gwt.http.HTTP" /> 

我.gwt.xml文件,但無法弄清楚如何添加,使其接受的JSON的東西。請問我錯過了什麼?

相關代碼:

private SearchResult[] parseResponse(String jsonResponse) { 
     ArrayList<SearchResult> retArray = new ArrayList<SearchResult>(); 

     JSONValue jval = JSONParser.parseStrict(jsonResponse); 

     JSONArray resultArray = jval.isArray(); 

     for(int i=0; i<resultArray.size(); i++) { 
      JSONObject resultObj = resultArray.get(i).isObject(); 
      String title = resultObj.get("title").isString().stringValue(); 
      JSONArray roleArray = resultObj.get("roles").isArray(); 
      String roleNames = new String(); 
      for(int j=0; j< roleArray.size(); j++) { 
       if(roleArray.get(j).isNumber().doubleValue() == 1.0) { 
        // this role is present 
        String currRole = Constants.getRoleNameForNum(j); 
        roleNames += currRole; 
       } 
      } 
      SearchResult sr = new SearchResult(title, roleNames); 
      retArray.add(sr); 
     } 

     return retArray.toArray(new SearchResult[0]); 
    } 

    private void doSearch() { 

     clearTable(); 

     final String searchTerms = searchTextBox.getText().toLowerCase().trim(); 
     searchTextBox.setFocus(true); 
     final int roleNum = roleChooserBox.getSelectedIndex(); 
     final String roleName = roleChooserBox.getItemText(roleNum); 
     String url = JSON_URL + "?" + ROLE_TXT + roleNum + "&" + QUERY_TXT + "'" + searchTerms + "'"; 
     url = URL.encode(url); 

     RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url); 
     try { 
      Request request = builder.sendRequest(null, new RequestCallback() { 

       @Override 
       public void onError(Request request, Throwable exception) { 
        displayError("Couldnt' retrieve JSON"); 

       } 
       @Override 
       public void onResponseReceived(Request request, Response response) { 


        if (200 == response.getStatusCode()) { 
         SearchResult[] results = parseResponse(response.getText()); 
         updateTable(results, roleName); 
        } else { 
         displayError("Couldn't retrieve JSON (" + response.getStatusText() 
           + ")"); 
        } 
       } 
      }); 
     } catch (RequestException e) { 
      displayError("Couldn't retrieve JSON"); 
     } 
      ` 
+0

你可以添加你的'SearchResult'類 – 2015-02-10 22:20:36

+0

它只是一個bean。當它使用GWT RPC作爲測試時,一切正常,但當我試圖將其轉換爲使用REST API時,我遇到了問題。 – betseyb 2015-02-11 00:23:42

+0

當我開始使用'com.google.gwt.json'時,我不必爲.gwt.xml文件添加任何內容。是否有可能缺少一些其他進口? – 2015-02-11 00:37:09

回答

13

進一步的試錯後,加入

<inherits name="com.google.gwt.json.JSON" /> 

我.gwt.xml文件的伎倆。我很失望,我無法找到解釋該文檔的任何信息。它會節省很多時間。