2016-03-22 56 views
-1

以下は項目のリストから検索するコードです。しかし、それはjson.JSONExceptionを与えます:毎回ProductListエラーの値がなく、「サーバを接続できません。後で試してください。」というメッセージが表示されます。json.JSONException:ProductListの値がありません

class myAsyncTask extends AsyncTask<String, Void, String>{ 

    JSONParser jParser; 
    JSONArray productList; 
    String url = new String(); 
    String textSearch; 
    ProgressDialog pd; 

    @Override 
    protected void onPreExecute(){ 

     super.onPreExecute(); 
     productList = new JSONArray(); 
     jParser = new JSONParser(); 
     pd = new ProgressDialog(getActivity()); 
     pd.setCancelable(false); 
     pd.setMessage("Searching...."); 
     pd.getWindow().setGravity(Gravity.CENTER); 
     pd.show(); 

    } 

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

     url= "http://demo5657559.mockable.io/getitems"+sText[0]; 
     String returnResult = getProductList(url); 
     this.textSearch = sText[0]; 
     return returnResult; 


    } 

    public String getProductList(String url){ 

     Product tempProduct = new Product(); 
     String matchFound = "N"; 
     Log.d("Tatheer", "productResults size - "+productResults.size()); 

     try{ 

      JSONObject json = jParser.getJSONFromUrl(url); 
      productList = json.getJSONArray("ProductList"); 

      for(int i = 0; i<productList.length();i++){ 

       tempProduct = new Product(); 

       JSONObject obj = productList.getJSONObject(i); 


       tempProduct.setProductCode(obj.getString("ProductCode")); 
       tempProduct.setProductName(obj.getString("ProductName")); 
       tempProduct.setProductGrammage(obj.getString("ProductGrammage")); 
       tempProduct.setProductBarcode(obj.getString("ProductBarcode")); 
       tempProduct.setProductDivision(obj.getString("ProductCatCode")); 
       tempProduct.setProductDepartment(obj.getString("ProductSubCode")); 
       tempProduct.setProductMRP(obj.getString("ProductMRP")); 
       tempProduct.setProductBBPrice(obj.getString("ProductBBPrice")); 

       matchFound = "N"; 

       for (int j = 0; j < productResults.size();j++){ 

        if (productResults.get(j).getProductCode().equals(tempProduct.getProductCode())){ 

         matchFound = "Y"; 
        } 

       } 

       if (matchFound == "N"){ 

        productResults.add(tempProduct); 

       } 



      } 

      Log.d("Tatheer", "productResults size - "+productResults.size()); 
      return ("OK"); 



     } 

     catch (Exception e){ 

      e.printStackTrace(); 
      return ("Exception Caught"); 
     } 

    } 

    @Override 
    protected void onPostExecute(String result){ 

     super.onPostExecute(result); 
     if (result.equalsIgnoreCase("Exception Caught")){ 

      Toast.makeText(getActivity(), "Unable to connect Server please try later", Toast.LENGTH_LONG).show(); 

      pd.dismiss(); 

     } 

     else { 


      Log.d("Tatheer", "existing on PostExecute"); 
      filterProductArray(textSearch); 
      searchResults.setAdapter(new SearchResultsAdapter(getActivity(), filteredProductResults)); 
      pd.dismiss(); 
     } 

    } 


} 


} 

Search.java

から

myAsyncTaskクラスLogcat:

03-22 09:50:56.624 5733-5764/? W/System.err: org.json.JSONException: No     value for ProductList 
03-22 09:50:56.624 5733-5764/? W/System.err:  at org.json.JSONObject.get(JSONObject.java:389) 
03-22 09:50:56.624 5733-5764/? W/System.err:  at org.json.JSONObject.getJSONArray(JSONObject.java:584) 
03-22 09:50:56.624 5733-5764/? W/System.err:  at com.zing.basket.Search$myAsyncTask.getProductList(Search.java:167) 
03-22 09:50:56.624 5733-5764/? W/System.err:  at com.zing.basket.Search$myAsyncTask.doInBackground(Search.java:151) 
03-22 09:50:56.624 5733-5764/? W/System.err:  at com.zing.basket.Search$myAsyncTask.doInBackground(Search.java:125) 
03-22 09:50:56.624 5733-5764/? W/System.err:  at android.os.AsyncTask$2.call(AsyncTask.java:295) 
03-22 09:50:56.625 5733-5764/? W/System.err:  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
03-22 09:50:56.625 5733-5764/? W/System.err:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
03-22 09:50:56.625 5733-5764/? W/System.err:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
03-22 09:50:56.625 5733-5764/? W/System.err:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
03-22 09:50:56.625 5733-5764/? W/System.err:  at java.lang.Thread.run(Thread.java:818) 
03-22 09:50:56.741 5733-5748/? E/Surface: getSlotFromBufferLocked: unknown buffer: 0xab3d3650 

JSON

{ 
"ProductList":[ 
{ 

"ProductCode":"1", 
"ProductName":"DALDA Cooking oil 1 LTR", 
"ProductGrammage":"5g", 
"ProductBarcode":"1234567891011", 
"ProductCatCode":"EDIBLE GROCERY", 
"ProductSubCode":"OIL/GHEE", 
"ProductMRP":"100", 
"ProductBBPrice": "120" 

} 
]} 

親切に助けて!

+0

値が_urlで[0] STEXTを表している何= "http://demo5657559.mockable.io/getitems"+sText[0];_? –

+0

この行の後 JSONObject json = jParser.getJSONFromUrl(url); あなたの応答をログに記録してください。 Log.w( "Json response"、json.toString()); 入手した情報を確認し、そこからデバッグします。 –

+0

この行をチェックしてください 'String returnResult = getProductList(url);'。結果が有効であることを確認します。 –

答えて

0

url = "http://demo5657559.mockable.io/getitems" + sText [0];

URLにバックスラッシュが必要だと思います。 ウェブAPIを呼び出すための正しいフォーマットについてAPIデベロッパーに問い合わせ、url = "http://demo5657559.mockable.io/getitems/" + sText [0]を試してください。

URLにバックスラッシュが追加されていることに注意してください。

URLが正しくない場合、エンドポイントが見つかりません。エラーが発生し、JSONArray "ProductList"がレスポンスに存在しません。

+0

が試行されました。 does not work –

+0

sText [0]の値は何ですか? – crashOveride

0
class myAsyncTask extends AsyncTask<String, Void, String>{ 

    JSONParser jParser; 
    JSONArray productList; 
    String url = new String(); 
    String textSearch; 
    ProgressDialog pd; 
    String sText[0]=null; 

    @Override 
    protected void onPreExecute(){ 

     super.onPreExecute(); 
     productList = new JSONArray(); 
     jParser = new JSONParser(); 
     pd = new ProgressDialog(getActivity()); 
     pd.setCancelable(false); 
     pd.setMessage("Searching...."); 
     pd.getWindow().setGravity(Gravity.CENTER); 
     pd.show(); 

    } 

    @Override 
    protected String doInBackground(String... sText){ 
if(sText[0]!=null){ 
     url= "http://demo5657559.mockable.io/getitems"+sText[0]; 
     String returnResult = getProductList(url); 
     this.textSearch = sText[0]; 
     return returnResult; 
}else{ 
url= "http://demo5657559.mockable.io/getitems"; 
      String returnResult = getProductList(url); 
      this.textSearch = sText[0]; 
      return returnResult; 
} 



    } 

    public String getProductList(String url){ 

     Product tempProduct = new Product(); 
     String matchFound = "N"; 
     Log.d("Tatheer", "productResults size - "+productResults.size()); 

     try{ 

      JSONObject json = jParser.getJSONFromUrl(url); 
      productList = json.getJSONArray("ProductList"); 

      for(int i = 0; i<productList.length();i++){ 

       tempProduct = new Product(); 

       JSONObject obj = productList.getJSONObject(i); 


       tempProduct.setProductCode(obj.getString("ProductCode")); 
       tempProduct.setProductName(obj.getString("ProductName")); 
       tempProduct.setProductGrammage(obj.getString("ProductGrammage")); 
       tempProduct.setProductBarcode(obj.getString("ProductBarcode")); 
       tempProduct.setProductDivision(obj.getString("ProductCatCode")); 
       tempProduct.setProductDepartment(obj.getString("ProductSubCode")); 
       tempProduct.setProductMRP(obj.getString("ProductMRP")); 
       tempProduct.setProductBBPrice(obj.getString("ProductBBPrice")); 

       matchFound = "N"; 

       for (int j = 0; j < productResults.size();j++){ 

        if (productResults.get(j).getProductCode().equals(tempProduct.getProductCode())){ 

         matchFound = "Y"; 
        } 

       } 

       if (matchFound == "N"){ 

        productResults.add(tempProduct); 

       } 



      } 

      Log.d("Tatheer", "productResults size - "+productResults.size()); 
      return ("OK"); 



     } 

     catch (Exception e){ 

      e.printStackTrace(); 
      return ("Exception Caught"); 
     } 

    } 

    @Override 
    protected void onPostExecute(String result){ 

     super.onPostExecute(result); 
     if (result.equalsIgnoreCase("Exception Caught")){ 

      Toast.makeText(getActivity(), "Unable to connect Server please try later", Toast.LENGTH_LONG).show(); 

      pd.dismiss(); 

     } 

     else { 


      Log.d("Tatheer", "existing on PostExecute"); 
      filterProductArray(textSearch); 
      searchResults.setAdapter(new SearchResultsAdapter(getActivity(), filteredProductResults)); 
      pd.dismiss(); 
     } 

    } 


} 


} 
+0

コードを変更しましたか? –

+0

私は条件をチェックしましたif(sText [0]!= null){ –

0

// Given a URL, establishes an HttpUrlConnection and retrieves 
// the web page content as a InputStream, which it returns as 
// a string. 
private String downloadUrl(String myurl) throws IOException { 
    InputStream is = null; 
    // Only display the first 500 characters of the retrieved 
    // web page content. 
    int len = 500; 

    try { 
     URL url = new URL(myurl); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setReadTimeout(10000 /* milliseconds */); 
     conn.setConnectTimeout(15000 /* milliseconds */); 
     conn.setRequestMethod("GET"); 
     conn.setDoInput(true); 
     // Starts the query 
     conn.connect(); 
     int response = conn.getResponseCode(); 
     Log.d(DEBUG_TAG, "The response is: " + response); 
     is = conn.getInputStream(); 

     // Convert the InputStream into a string 
     String contentAsString = readIt(is, len); 
     return contentAsString; 

    // Makes sure that the InputStream is closed after the app is 
    // finished using it. 
    } finally { 
     if (is != null) { 
      is.close(); 
     } 
    } 
} 

HttpUrlConnectionを使用してJSONを取得して、文字列を解析

出典:Connecting to the Network