Java 在Android中使用JCIFS
情况如下: 我想用代码验证我的Android设备,通过向特定URL发送用户名和密码,该URL将具有内部和外部访问权限。 通过阅读使用NTML连接windows的主要任务,并尝试使其在android中工作,我插入了以下代码: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
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
。以下是可能的解决办法:
我发现了什么情况下的错误以及我的情况下的解决方案。 首先感谢@Pavan Kumar回答问题并给我一些提示
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();}