上篇博文的通讯方式采用的是httpclient,通讯的确是可以,但是目前用到json格式往sql里传数据的时候出现了问题:写json格式需要jar包,其中一个包是commons-collections-3.2.1.jar,导入之后出现错误:
也就是apache出现重复包。
查完资料才知道 httpclient已经被android抛弃,,apache出现重复包很常见。所以在android机上改用Retrofit2协议。并且不用单独考虑json,已经集成了gson,网络请求一步到位。
参考博文:https://www.jianshu.com/p/27ccb943693f
以下是android的访问tomcat示意代码,仍是查询代码,tomcat端不用修改:
public class MainActivity extends Activity implements View.OnClickListener{
public static final int SHOW_RESPONSE=1;
private static EditText uid,pwd;
private static Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
uid=this.findViewById(R.id.username);
pwd=this.findViewById(R.id.password);
button=this.findViewById(R.id.Login);
button.setOnClickListener(this);
}
public void onClick(View v){
switch (v.getId()){
case R.id.Login:
login();
break;
}
}
public void login(){
String id=uid.getText().toString().trim();
String pw=pwd.getText().toString().trim();
Retrofit retrofit=new Retrofit.Builder()
.baseUrl("http://192.168.0.109/")
.build();
Demo demo=retrofit.create(Demo.class);
Call<ResponseBody>data=demo.doLogin(id,pw);
data.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
try{
Log.i("TAG------>response", response.body().string());
}catch (IOException e){
e.printStackTrace();
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Log.i("TAG", "请求失败: " + t);
}
});
}
interface Demo {
@FormUrlEncoded
@POST("/MyTest/Login")
Call<ResponseBody>doLogin(@Field("ID") String ID,@Field("PW") String PW);
}
}
以上在虚拟机上测试可以,在真机上测试出现问题:
java.net.UnknownServiceException: CLEARTEXT communication to 192.168.0.109 not permitted by network
参考博文:https://blog.csdn.net/cy123cy456cy/article/details/94715318
添加xml文件并且在AndroidManifest.xml中修改即可成功。