如何在android手机上安装.png文件(外部)

如何在android手机上安装.png文件(外部),android,image,http,Android,Image,Http,我在尝试将.png图像添加到android手机时遇到问题。 我现在已经做到了这一点: URL url = new URL ("http://oranjelan.nl/oranjelan-bg.png"); InputStream input = url.openStream(); try { String storagePath = Environment.getExternalStorageDirectory(); OutputStream output = ne

我在尝试将.png图像添加到android手机时遇到问题。 我现在已经做到了这一点:

URL url = new URL ("http://oranjelan.nl/oranjelan-bg.png");
  InputStream input = url.openStream();
  try { 
     String storagePath = Environment.getExternalStorageDirectory();
     OutputStream output = new FileOutputStream (storagePath + "/oranjelangbg.png");
     try {
    byte[] buffer = new byte[1000000];
        int bytesRead = 0;
        while ((bytesRead = input.read(buffer, 0, buffer.length)) >= 0) {
        output.write(buffer, 0, bytesRead);
        }
     } finally {
      output.close();
        }
    } finally {
   input.close();
 }
但是我得到以下错误@String storagePath=Environment.getExternalStorageDirectory();编译器说无法将文件转换为字符串

然后,如果我有点胡闹,尝试一下这段代码:

URL url;

    void setup() {
    try {

        URL url = new URL ("http://oranjelan.nl/oranjelan-bg.png");
        InputStream input = url.openStream();{
        try {

            String storagePath = Environment.getExternalStorageDirectory().getName();
            OutputStream output = new FileOutputStream (storagePath + "/oranjelangbg.png");
                try {


byte[] buffer = new byte[1000000];
                    int bytesRead = 0;
                    while ((bytesRead = input.read(buffer, 0, buffer.length)) >= 0) {
                    output.write(buffer, 0, bytesRead);
                    }
                    } finally {
            output.close();
            }
            } catch (IOException e) {
            // TODO Auto-generated catch block
            throw new RuntimeException(e);
    } finally {
        try {
            input.close();
            } catch (IOException e) {
            // TODO Auto-generated catch block
            throw new RuntimeException(e);
     }
   }    
 }    
    } catch (MalformedURLException ex) {
      throw new RuntimeException(ex);
    } catch (IOException e) {
      // TODO Auto-generated catch block
      throw new RuntimeException(e);
    }
  }
}
当我启动应用程序时,我的安卓系统就会冻结


有人有什么想法吗?

请查看文档以了解

它返回一个文件(java.io.File),而不是字符串

我使用了一些大致如下的东西:

File storagePath = Environment.getExternalStorageDirectory();
File outFile = new File(storagePath, filename + FILE_EXTENSION);
OutputStream outStream = new FileOutputStream(outFile);

查看文档以了解更多信息

它返回一个文件(java.io.File),而不是字符串

我使用了一些大致如下的东西:

File storagePath = Environment.getExternalStorageDirectory();
File outFile = new File(storagePath, filename + FILE_EXTENSION);
OutputStream outStream = new FileOutputStream(outFile);

试试这样的

 File storagePath = new File(Environment.getExternalStorageDirectory()+ "/oranjelangb.png");
 OutputStream output = new FileOutputStream (storagePath.getAbsoluteFile());

试试这样的

 File storagePath = new File(Environment.getExternalStorageDirectory()+ "/oranjelangb.png");
 OutputStream output = new FileOutputStream (storagePath.getAbsoluteFile());

除了Tanis.7x所指出的之外,您还需要将网络操作移出UI线程,转移到AyncTask之类的任务中。否则,在应用程序完成下载之前,您将无法与应用程序交互-这可能会导致应用程序无响应消息和强制关闭。在最近的android版本中,在主线程上进行联网是一个自动的例外,即使它不会导致延迟。

除了Tanis.7x所指出的之外,您还需要将网络操作移出UI线程,转移到AyncTask之类的任务中。否则,在应用程序完成下载之前,您将无法与应用程序交互-这可能会导致应用程序无响应消息和强制关闭。在较新的android版本中,在主线程上进行联网是一个自动例外,即使不会导致延迟。

哇,很多回复,非常感谢提前回复,我现在必须退出,将在周一回来,然后回复并查看。尝试在不同的线程中下载图像。这将克服冰冻问题。谢谢大家,我想我现在明白了,所有的雨篷都很好!而且帮了我很多忙!哇,很多回复,非常感谢提前,我现在必须退出,将在周一回来,然后回复并查看。尝试用不同的线程下载图像。这将克服冰冻问题。谢谢大家,我想我现在明白了,所有的雨篷都很好!而且帮了我很多忙@Ankit-不要否决准确的部分答案,除非它们声称是完整的。我可以很容易地对你的答案投反对票,因为它遗漏了大量内容,但我不会投反对票。我添加了一个代码示例进行澄清,但消息的原始内容仍然相关,应该已经令人满意地回答了这个问题。@Ankit-答案不必是代码形式的,指出确切的问题就足够了。@Ankit-事实上,指出精确问题的简明答案很好。@Ankit-不要轻视精确的部分答案,除非它们声称是完整的。我可以很容易地对你的答案投反对票,因为它遗漏了大量内容,但我不会投反对票。我添加了一个代码示例进行澄清,但消息的原始内容仍然相关,应该已经令人满意地回答了这个问题。@Ankit-答案不必是代码形式的,指出确切的问题就足够了。@Ankit-事实上,简洁的答案指出了确切的问题,这是很好的。