2015-11-06 63 views
-1

今天我遇到了一個問題,我無法讀取JSON文件的內容。爲什麼我無法從這個URL讀取JSON?

public class MainActivity extends ActionBarActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       new LoadJsonAsync().execute("http://dongabank.com.vn/exchange/export"); 
      } 
     }); 
    } 

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

     @Override 
     protected String doInBackground(String... params) { 
      if(params[0] != null){ 
       return readFromURL(params[0]); 
      }else { 
       return null; 
      } 
     } 
     @Override 
     protected void onPostExecute(String s) { 
      Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show(); 
     } 
    } 

    private static String readFromURL(String url){ 
     StringBuilder content = new StringBuilder(); 
     try { 
      URL u = new URL(url); 
      URLConnection urlConnection = u.openConnection(); 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); 
      String line; 

      while((line = bufferedReader.readLine()) != null){ 
       content.append(line + "\n"); 
      } 
      bufferedReader.close(); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return content.toString(); 
    } 

} 

問題是from

當我嘗試使用其他json環節,它正常工作。但是當我使用上面的json鏈接時,我無法讀取任何內容。 有人向我解釋爲什麼?以及如何解決這個問題?

謝謝!

回答

1

這是因爲這個JSON響應不是JSON。

實際上,這個JSON響應包含在括號中。您必須以String的形式檢索響應,然後在解析爲JSON之前移除第一個和最後一個括號。

+0

要卸下支架是簡單的我。但爲什麼我不能讀入bufferedReader? – alway5dotcom

+1

經過測試後,我發現如果您沒有指定「Accept」標頭,出於某種原因,此服務器會響應錯誤。 添加此行'urlConnection.setRequestProperty(「Accept」,「text/html,application/xhtml + xml,application/xml; q = 0.9,image/webp,*/*; q = 0.8」);'打開連接。 – Gabriel

0

您的JSON是無效的,去掉開頭的支架和你的字符串

0

結束它不是一個JSON,這就像一個JSONP,谷歌它

相關問題