问题描述
我正在实现一个Android App,该App必须与某些Java servlet进行通信才能获取数据。
应用程序和Servlet之间的连接由httpRequest建立。
Java Servlet在配置如下的Tomcat服务器上运行:
java servlet代码正确运行,我在桌面版本的App中对其进行了测试。 问题是当我尝试将应用程序连接到servlet时。 这里是管理与Servlet的连接的android活动的代码:
private String user;
String DEBUG_TAG = "debug";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
onStart();
}
public void log(View view) { //action performed when users click on login button
EditText username= findViewById(R.id.username);
EditText password= findViewById(R.id.password);
String account_username=username.getText().toString();
String account_password=password.getText().toString();
String URL = "http://10.0.2.2:8080/Ripetizioni/Login/?uname=" + account_username+ "&psw="+account_password;
if(isOnLine()){
new ExecuteLogin().execute(URL);
}
switch(user) {
case "client":
Intent i = new Intent(this,UserActivity.class);
startActivity(i);
break;
case "administrator":
Intent ii = new Intent(this,AdminActivity.class);
startActivity(ii);
break;
default:
break;
}
}
private class ExecuteLogin extends AsyncTask<String,Void,String>{
@Override
protected String doInBackground(String... params) {
try {
return getUser(params[0]);
} catch (Exception e) {
e.printstacktrace();
return null;
}
}
@Override
protected void onPostExecute(String s) {
setUser(s);
}
}
public String getUser(String myurl) {
HttpURLConnection conn = null;
try {
URL url = new URL(myurl);
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000); //milliseconds
conn.setConnectTimeout(15000); //milliseconds
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.connect();
int response = conn.getResponseCode();
Log.d(DEBUG_TAG,"The response is: " + response);
return readIt(conn.getInputStream());
} catch (Exception ex) {
Log.e("async",ex.getMessage());
ex.printstacktrace();
return null;
} finally {
if (conn != null) {
conn.disconnect();
}
}
}
private String readIt(InputStream stream) throws IOException {
BufferedReader reader = new BufferedReader(
new InputStreamReader(stream));
String line;
StringBuilder result = new StringBuilder();
while ((line = reader.readLine()) != null) {
result.append(line).append("\n");
}
return result.toString();
}
public boolean isOnLine() {
ConnectivityManager connMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
assert connMgr != null;
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
return (networkInfo != null && networkInfo.isConnected());
} else {
assert connMgr != null;
Network[] nets = connMgr.getAllNetworks();
Context context = getApplicationContext();
for (Network net : nets) {
NetworkInfo info = connMgr.getNetworkInfo(net);
assert info != null;
String tipo = info.getTypeName();
boolean connessa = info.isConnected();
if (connessa) {
String tip = "";
if (info.getType() == connMgr.TYPE_MOBILE) {
tip = "Mobile";
} else if (info.getType() == connMgr.TYPE_WIFI) {
tip = "WiFi";
}
Log.d(DEBUG_TAG,"Mobile connected: " + tip);
String text = "internet connessa! " + tipo + " " + tip;
text += info.toString();
Toast toast = Toast.makeText(context,text,Toast.LENGTH_SHORT);
toast.show();
return true;
}
}
Toast toast = Toast.makeText(context,"NO RETE",Toast.LENGTH_SHORT);
toast.show();
return false;
}
}
}
代码在“ getUser”方法内部出现一些错误,这是控制台日志:
D/AndroidRuntime: Shutting down VM
D/NetworkSecurityConfig: No Network Security Config specified,using platform default
E/AndroidRuntime: FATAL EXCEPTION: main
Process: it.repetition.test,PID: 10750
java.lang.IllegalStateException: Could not execute method for android:onClick
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:414)
at android.view.View.performClick(View.java:6597)
at android.view.View.performClickInternal(View.java:6574)
at android.view.View.access$3100(View.java:778)
at android.view.View$PerformClick.run(View.java:25885)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409)
at android.view.View.performClick(View.java:6597)
at android.view.View.performClickInternal(View.java:6574)
at android.view.View.access$3100(View.java:778)
at android.view.View$PerformClick.run(View.java:25885)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.hashCode()' on a null object reference
at it.repetition.test.LoginActivity.log(LoginActivity.java:73)
at java.lang.reflect.Method.invoke(Native Method)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409)
at android.view.View.performClick(View.java:6597)
at android.view.View.performClickInternal(View.java:6574)
at android.view.View.access$3100(View.java:778)
at android.view.View$PerformClick.run(View.java:25885)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
如果我调试代码,则在“ getUser”方法中会出现如下异常:
java.io.FileNotFoundException: http://10.0.2.2:8080/Ripetizioni/Login/?uname=Mario&psw=012abc
可能我做了一些配置错误或类似的事情,但是我对Android并没有太多练习,所以我不明白如何解决这些错误。 感谢您的帮助!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)