无法使用 Android 从 Google 云存储 url 下载图像
Unable to download image from Google Cloud Storage url with Android
我在从我的 android 应用从 Google 云存储 public url 下载图像时遇到问题。我的代码非常适合来自其他来源的图像。来自 Google Cloud Storage 的图像也可以从 Web 浏览器访问而不会出现问题。以这张图片为例:http://tin_images.storage.googleapis.com/1420678062-zmj1qJQe126843HbyJvbUI.jpg
这是一个演示问题的 intentservice:
public class TestService1 extends IntentService {
public TestService1(){
super("TestService1");
}
@Override
protected void onHandleIntent(Intent intent) {
String urlString="http://tin_images.storage.googleapis.com/1420678062-zmj1qJQe126843HbyJvbUI.jpg";
try {
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(urlString);
HttpResponse response = httpclient.execute(httpget);
}
catch(IOException e){
e.printStackTrace();
}
}
}
这给了我以下错误信息:
java.lang.IllegalArgumentException: 主机名不能为空
我也试过使用 httpurlconnection:
public class TestService2 extends IntentService {
public TestService2() {
super("TestService2");
}
@Override
protected void onHandleIntent(Intent intent) {
String urlString="http://tin_images.storage.googleapis.com/1420678062-zmj1qJQe126843HbyJvbUI.jpg";
try {
URL url = new URL(urlString);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.connect();
}
catch(IOException e){
e.printStackTrace();
}
}
}
这里的错误(在catch-block中被捕获)是
java.net.UnknownHostException: http://tin_images.storage.googleapis.com/1420678062-zmj1qJQe126843HbyJvbUI.jpg
在这两种情况下,如果我使用另一个 url 就可以正常工作。我更喜欢使用 HttpClient,因为我在应用程序的其余部分使用该库。
有什么办法可以解决这个问题吗?
如所述here, HttpClient seems not to support underscores for hostname。
此外,关于在域名和主机名上使用下划线的问题很长discussion。
你是不是忘了这个:
android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE
android.permission.READ_PHONE_STATE
?
也尝试从默认网络浏览器应用程序打开此图像。
我建议您使用通用图片加载器下载图片 https://github.com/nostra13/Android-Universal-Image-Loader
我在从我的 android 应用从 Google 云存储 public url 下载图像时遇到问题。我的代码非常适合来自其他来源的图像。来自 Google Cloud Storage 的图像也可以从 Web 浏览器访问而不会出现问题。以这张图片为例:http://tin_images.storage.googleapis.com/1420678062-zmj1qJQe126843HbyJvbUI.jpg
这是一个演示问题的 intentservice:
public class TestService1 extends IntentService {
public TestService1(){
super("TestService1");
}
@Override
protected void onHandleIntent(Intent intent) {
String urlString="http://tin_images.storage.googleapis.com/1420678062-zmj1qJQe126843HbyJvbUI.jpg";
try {
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(urlString);
HttpResponse response = httpclient.execute(httpget);
}
catch(IOException e){
e.printStackTrace();
}
}
}
这给了我以下错误信息:
java.lang.IllegalArgumentException: 主机名不能为空
我也试过使用 httpurlconnection:
public class TestService2 extends IntentService {
public TestService2() {
super("TestService2");
}
@Override
protected void onHandleIntent(Intent intent) {
String urlString="http://tin_images.storage.googleapis.com/1420678062-zmj1qJQe126843HbyJvbUI.jpg";
try {
URL url = new URL(urlString);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.connect();
}
catch(IOException e){
e.printStackTrace();
}
}
}
这里的错误(在catch-block中被捕获)是
java.net.UnknownHostException: http://tin_images.storage.googleapis.com/1420678062-zmj1qJQe126843HbyJvbUI.jpg
在这两种情况下,如果我使用另一个 url 就可以正常工作。我更喜欢使用 HttpClient,因为我在应用程序的其余部分使用该库。
有什么办法可以解决这个问题吗?
如所述here, HttpClient seems not to support underscores for hostname。
此外,关于在域名和主机名上使用下划线的问题很长discussion。
你是不是忘了这个:
android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE
android.permission.READ_PHONE_STATE
?
也尝试从默认网络浏览器应用程序打开此图像。
我建议您使用通用图片加载器下载图片 https://github.com/nostra13/Android-Universal-Image-Loader