【问题标题】:Android checks if file exists in a remote server using its URLAndroid 使用其 URL 检查文件是否存在于远程服务器中
【发布时间】:2014-06-30 15:26:23
【问题描述】:

我希望我的 Android 程序使用其 URL 检查文件(例如 index.php)是否存在于远程服务器中。即,如果我单击按钮,它应该检查 url 是否存在。如果是,它应该加载相同的 URL,否则会显示消息“文件不存在!”

我做了这样的事情:

   private OnClickListener cameraListener9=new OnClickListener(){
    public void onClick(View v){

    idNo=editText.getText().toString();

    String URLName ="http://blahblah/kufpt/upload_test/"+ idNo + "/index.php";

    boolean bResponse = exists(URLName);
    if (bResponse==true)
    {
        Toast.makeText(MainActivity.this, "FILE EXISTS" , Toast.LENGTH_SHORT).show();
        WebView mWebView =(WebView)findViewById(R.id.webView);
        mWebView.loadUrl(URLName);

    }
    else
        Toast.makeText(MainActivity.this, "File does not exist!", Toast.LENGTH_SHORT).show();

    }
};

/* 这是检查 index.php 文件是否存在或已创建的函数 */ 如Check if file exists on remote server using its URL 中所建议的那样

    public static boolean exists(String URLName){
    try {
      HttpURLConnection.setFollowRedirects(false);
      // note : you may also need
      //HttpURLConnection.setInstanceFollowRedirects(false)

      HttpURLConnection con =  (HttpURLConnection) new URL(URLName).openConnection();
      con.setRequestMethod("HEAD");
      return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
     }
    catch (Exception e) {
       e.printStackTrace();
       return false;
    }
  }

但是,即使文件确实存在于指定文件夹中,这也总是给我一个错误的返回值。只是一次绝望的尝试,我尝试显示 con.getResponsecode() 的值,它总是给我一个 0 值。任何人都可以帮助我为什么输出会这样?

【问题讨论】:

  • 您是否在清单中添加了Internet 权限?
  • 您可能遇到了异常。如果是这样,您可以发布例外情况吗?
  • @Coderji 感谢您的回复。我的清单中确实有互联网许可:
  • @Henry 不,我没有遇到任何异常。我的意思是,我尝试显示 getResponseCode 和 HttpURLConnection.HTTP_OK 的结果,这总是分别给我 0 和 200,这让我相信没有例外。问题是不确定这段代码是否真的建立了与服务器的连接。

标签: android url file-exists android-internet


【解决方案1】:

我相信你是在你的主线程中这样做的。这就是它不工作的原因,你不能在你的主线程中执行网络操作。

尝试将代码放在 AsyncTask 或 Thread 中。

编辑 1:作为一种快速修复,尝试像这样包装您的“文件检查代码”:

    new Thread() {

        public void run() {
        //your "file checking code" goes here like this
        //write your results to log cat, since you cant do Toast from threads without handlers also...

      try {
         HttpURLConnection.setFollowRedirects(false);
         // note : you may also need
         //HttpURLConnection.setInstanceFollowRedirects(false)

         HttpURLConnection con =  (HttpURLConnection) new URL(URLName).openConnection();
         con.setRequestMethod("HEAD");
         if( (con.getResponseCode() == HttpURLConnection.HTTP_OK) ) 
            log.d("FILE_EXISTS", "true");
         else 
            log.d("FILE_EXISTS", "false");
 }
              catch (Exception e) {
                e.printStackTrace();
               log.d("FILE_EXISTS", "false");;
           }
             }
      }.start();    

【讨论】:

  • SirJanBo,它有效!非常感谢......如果文件确实存在,它会给我 200,如果不存在,它会给我 404。但只是一个后续问题,是否可以使用 WebView 在该线程中加载 url?当我插入这行代码时,它似乎不起作用: if( (con.getResponseCode() == HttpURLConnection.HTTP_OK) ) { Log.d("FILE_EXISTS", "true"); WebView mWebView =(WebView)findViewById(R.id.webView); mWebView.loadUrl(URLName); }
  • 彻底解决了问题,别管后续问题了!再次感谢 @JanBo 先生!.. 你拯救了我的一天!
猜你喜欢
  • 2011-06-03
  • 2012-06-13
  • 2014-01-31
  • 1970-01-01
  • 2014-12-07
  • 2013-01-01
  • 2013-10-30
  • 2020-06-23
  • 1970-01-01
相关资源
最近更新 更多