2011-02-17 110 views
4

是否可以從URL中下載帶有JSON數據的文件?此外,我需要得到的文件沒有文件擴展名,這是一個問題,或者我可以強迫它下載一個.txt擴展名?Android - 從網址下載JSON文件

更新: 我忘了提及,該網站需要輸入用戶名和密碼才能訪問我知道的網站。有一種方法可以在檢索文件時輸入這些值嗎?

+1

嗨,試試[這](http://stackoverflow.com/questions/576513/android-download-binary-file-problems)。 – Pasha 2011-02-17 10:04:39

回答

1

基本上,你會做這樣的事情:

代碼:

URL address = URL.parse("http://yoururlhere.com/yourfile.txt"); 
URLConnection conn = new URLConnection(address); 
InputStream is = conn.getInputStream(); 
BufferedInputStream bis = new BufferedInputStream(is); 
ByteArrayBuffer bab = new ByteArrayBuffer(64); 
int current = 0; 

while((current = bis.read()) != -1) { 
    bab.append((byte)current); 
} 

FileOutputStream fos = new FileOutputStream(new File(filepath)); 
fos.write(bab.toByteArray()); 
fos.close(); 
+0

這將失敗,因爲您無法實例化URLConnection。 – FractalBob 2016-03-17 17:18:03

3

您是否嘗試過使用URLConnection的?

private InputStream getStream(String url) { 
    try { 
     URL url = new URL(url); 
     URLConnection urlConnection = url.openConnection(); 
     urlConnection.setConnectTimeout(1000); 
     return urlConnection.getInputStream(); 
    } catch (Exception ex) { 
     return null; 
    } 
} 

還記得編碼您PARAMS這樣的:

String action="blabla"; 
InputStream myStream=getStream("http://www.myweb.com/action.php?action="+URLEncoder.encode(action)); 
+1

別忘了關閉輸入流:) – 2015-11-04 13:30:25

1

肯定。像其他人指出的那樣,基本URL是一個很好的起點。

雖然其他代碼示例的工作原理,但實際訪問JSON內容可能是單線程的。隨着Jackson JSON庫,你可以這樣做:

Response resp = new ObjectMapper().readValue(new URL("http://dot.com/api/?customerId=1234").openStream(),Response.class); 

,如果你想JSON數據綁定到您所定義的「迴應」:得到一個地圖,你反而會做:

Map<String,Object> map = new ObjectMapper().readValue(new URL("http://dot.com/api/?customerId=1234").openStream(), Map.class); 

爲添加用戶信息;這些通常使用Basic Auth傳遞,其中您將base64編碼的用戶信息作爲「授權」標頭傳遞。 爲此,您需要從URL打開HttpURLConnection,然後添加標題; JSON訪問部分仍然相同。

0

Here是一個類文件和一個接口,我寫了一個從URL下載JSON數據的接口。至於用戶名密碼認證,這將取決於您在訪問的網站上如何實施。