Lyd*_*Lyd 5 pdf android web-services file http-post
我正在开发一个必须从Web服务下载一些文件的Android应用程序.
目标
我想从网络服务下载PDF文件并在手机上显示.
问题
我是新手使用webservices并且我已经非常清楚如何获取文件并打开它.
这是我迄今为止的代码:
public void downloadFile(String username, String password, String filename) {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("username", username));
nameValuePairs.add(new BasicNameValuePair("password", password));
nameValuePairs.add(new BasicNameValuePair("filename", filename));
String output = httpPost(URL_DESCARGAS, nameValuePairs);
}
private String httpPost(String url, List<NameValuePair> nameValuePairs) {
/* Create new HttpClient and Post Header */
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
try {
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
/* Get output */
return inputStreamToString(response.getEntity().getContent()).toString();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "";
}
Run Code Online (Sandbox Code Playgroud)
我没有返回响应字符串,但我不知道我该做什么.那么如何显示返回Web服务的pdf?
在另一个活动中,我必须执行相同的操作,但Web服务返回一个.png,我想在imageview或类似的东西中显示它.这是以同样的方式完成的吗?
非常感谢你.我搜索了很长时间,但我没有找到任何东西.
编辑
我发现了url:http://www.androidsnippets.com/download-an-http-file-to-sdcard-with-progress-notification 我使用了它所说的内容,但文件没有创建(我不知道)在sdcard root中看到它.
这是我修改过的代码:
public void downloadFile(String username, String password, String filename) {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("username", username));
nameValuePairs.add(new BasicNameValuePair("password", password));
nameValuePairs.add(new BasicNameValuePair("filename", filename));
HttpResponse response = httpPost(URL_DESCARGAS, nameValuePairs);
HttpEntity entity = response.getEntity();
if (entity != null) {
try {
InputStream inputStream = entity.getContent();
//set the path where we want to save the file
//in this case, going to save it on the root directory of the
//sd card.
File SDCardRoot = Environment.getExternalStorageDirectory();
//create a new file, specifying the path, and the filename
//which we want to save the file as.
File file = new File(SDCardRoot, filename);
//this will be used to write the downloaded data into the file we created
FileOutputStream fileOutput = new FileOutputStream(file);
//create a buffer...
byte[] buffer = new byte[1024];
int bufferLength = 0; //used to store a temporary size of the buffer
//now, read through the input buffer and write the contents to the file
while ( (bufferLength = inputStream.read(buffer)) > 0 ) {
//add the data in the buffer to the file in the file output stream (the file on the sd card
fileOutput.write(buffer, 0, bufferLength);
}
//close the output stream when done
fileOutput.close();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
你能帮助我吗?我需要创建该文件并在手机中显示它.
我已经解决了。我忘记在 AndroidManifest.xml 中添加权限。
这是我的代码,它获取 httppost 的输出,在 SD 卡中创建文件并在用户已安装在设备中的 pdf 查看器中打开它:
活动课
public void downloadInvoice(View view) {
boolean ok = myApplication.downloadFile("pdf");
if (!ok) {
//If not ok, show error message
} else {
//Open file in pdf viewer that user has in the device
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()
+"/"+ myApplication.getActualUser().getActualInvoice().getPdf());
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.fromFile(file));
intent.setType("application/pdf");
startActivity(intent);
}
}
Run Code Online (Sandbox Code Playgroud)
AndroidManifest.xml
...
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4155 次 |
最近记录: |