2011-02-17 117 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数据的接口。至于用户名密码认证,这将取决于您在访问的网站上如何实施。