Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android中使用JCIFS_Java_Android_Android Studio_Urlconnection_Jcifs - Fatal编程技术网

Java 在Android中使用JCIFS

Java 在Android中使用JCIFS,java,android,android-studio,urlconnection,jcifs,Java,Android,Android Studio,Urlconnection,Jcifs,情况如下: 我想用代码验证我的Android设备,通过向特定URL发送用户名和密码,该URL将具有内部和外部访问权限。 通过阅读使用NTML连接windows的主要任务,并尝试使其在android中工作,我插入了以下代码: new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { t

情况如下: 我想用代码验证我的Android设备,通过向特定URL发送用户名和密码,该URL将具有内部和外部访问权限。 通过阅读使用NTML连接windows的主要任务,并尝试使其在android中工作,我插入了以下代码:

        new AsyncTask<Void, Void, Void>() {
        @Override
        protected Void doInBackground(Void... params) {

            try {
                String user = "username";
                String pass = "password";
                String sharedFolder = "shared";
                String url = "smb://url/url//" + sharedFolder + "/test.txt";
                NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(
                        null, user, pass);
                SmbFile sfile = new SmbFile(url, auth);
                sfile.canRead();
            } catch (Exception e) {
                e.printStackTrace();
            }




            return null;
        }
    }.execute();
我不知道错误是否在http协议中?还是在代码中?
此处需要调整的内容和遗漏的内容?

执行代码的设备无法解析主机名:
jorphp01
。以下是可能的解决办法:

  • 尝试将设备连接到同一网络,并确保它通过可解析此主机名的同一DNS服务器
  • 如果可以访问服务器,但DNS解析失败,请修改已配置的DNS服务器。可以使用类似的应用程序
  • 尝试在设备上的客户端应用程序中配置IP地址而不是主机名
  • 修改/etc/hosts文件(在根设备上)以将主机名解析为首选IP地址。参考:

  • 我发现了什么情况下的错误以及我的情况下的解决方案。 首先感谢@Pavan Kumar回答问题并给我一些提示

  • 我试图访问的服务器无法通过Android访问,因此我使用了服务器的IP地址而不是名称
  • 我已经使用jcifs库在网络连接中应用了OkHTTP,通过这种方法连接到我的服务器,在我的情况下效果很好:

    final TextView textView = (TextView) findViewById(R.id.tvResponse);
    
    new AsyncTask<Void, Void, String>() {
        @Override
        protected String doInBackground(Void... params) {
    
            HttpUrl.Builder urlBuilder = HttpUrl.parse("http://10.10.6.4/erpapi/").newBuilder();
            String url = urlBuilder.build().toString();
            // issue the Get request
            String getResponse = "";
            try {
                getResponse = doGetRequest(url);
                System.out.println(getResponse);
            } catch (IOException e) {
                e.printStackTrace();
                getResponse = e.getMessage();
            }
    
            return getResponse;
        }
    
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            textView.setText(s.toString().toLowerCase());
        }
    }.execute();
    
    和已使用jcifs库进行身份验证

    在此之后,我可以轻松登录到服务器并发送经过身份验证的邮件

    此外,以下是一些有用的资源:


    主机名:
    jorphp01
    无法从运行应用程序的设备上解析。尝试将设备连接到同一网络,并确保它通过可解析此主机名的同一DNS服务器。否则,您甚至可以通过配置IP地址而不是主机名来尝试。我需要与此主机通信,具体来说,此主机是使用JCIFS库的建议。但不管怎样,我都会试试你的答案,看看结果如何。谢谢您当我提到IP地址时,我指的是这个主机的IP地址,您可以使用
    nslookup
    ping
    找到它。它很有效!非常感谢。通过Android引用主机而不是IP地址时出现的错误,Android没有实现主机名,因此我将主机名更改为IP地址,并且可以正常工作。虽然这个问题对您来说已经不存在了,但为了更大的受众的利益,添加了答案。
    final TextView textView = (TextView) findViewById(R.id.tvResponse);
    
    new AsyncTask<Void, Void, String>() {
        @Override
        protected String doInBackground(Void... params) {
    
            HttpUrl.Builder urlBuilder = HttpUrl.parse("http://10.10.6.4/erpapi/").newBuilder();
            String url = urlBuilder.build().toString();
            // issue the Get request
            String getResponse = "";
            try {
                getResponse = doGetRequest(url);
                System.out.println(getResponse);
            } catch (IOException e) {
                e.printStackTrace();
                getResponse = e.getMessage();
            }
    
            return getResponse;
        }
    
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            textView.setText(s.toString().toLowerCase());
        }
    }.execute();
    
    static String doGetRequest(String url) throws IOException {
            okHttpClient = new OkHttpClient.Builder()
                    .authenticator(new NTMLAuthenticator("username", "password"))
                    .build();
            Request request = new Request.Builder()
                    .url(url)
                    .build();
            Response response = okHttpClient.newCall(request).execute();
            return response.body().string();}