Android数据库连接错误API低于23
(首先,我不是以英语为母语的人,所以我的英语很差) 我一直在开发一款android应用程序。基本上,我需要连接到SQL Server 2012 express数据库。在我使用不同的API 23之前,所有这些都可以正常工作。我在其他话题上发现了这个错误,但没有一个答案对我有效。这就是错误:Android数据库连接错误API低于23,android,database,api,Android,Database,Api,(首先,我不是以英语为母语的人,所以我的英语很差) 我一直在开发一款android应用程序。基本上,我需要连接到SQL Server 2012 express数据库。在我使用不同的API 23之前,所有这些都可以正常工作。我在其他话题上发现了这个错误,但没有一个答案对我有效。这就是错误: 04-08 10:56:06.510 1761-1761/com.example.*****.controlcodigosbox E/AndroidRuntime: FATAL EXCEPTION: main
04-08 10:56:06.510 1761-1761/com.example.*****.controlcodigosbox E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:289)
at android.view.View.performClick(View.java:4204)
at android.view.View$PerformClick.run(View.java:17355)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284)
at android.view.View.performClick(View.java:4204)
at android.view.View$PerformClick.run(View.java:17355)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.VerifyError: net/sourceforge/jtds/jdbc/TdsCore
at net.sourceforge.jtds.jdbc.JtdsConnection.<init>(JtdsConnection.java:359)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184)
at java.sql.DriverManager.getConnection(DriverManager.java:175)
at java.sql.DriverManager.getConnection(DriverManager.java:140)
at com.example.*****.controlcodigosbox.ConnectionClass.CONN(ConnectionClass.java:32)
at com.example.*****.controlcodigosbox.MainActivity.onClickRegistrar(MainActivity.java:95)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284)
at android.view.View.performClick(View.java:4204)
at android.view.View$PerformClick.run(View.java:17355)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
以下是主要代码:
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
public class MainActivity extends AppCompatActivity {
private String idDiametro, idMaterial, idAncho, idGama;
private String codigoS;
private LinearLayout layoutMuestra;
private TextView material, diametro, ancho, gama;
private Spinner spinnerBox;
private String[] arrayBox;
private EditText codigo, cantidad;
private ConnectionClass connectionClass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
layoutMuestra = (LinearLayout) findViewById(R.id.layoutMuestra);
spinnerBox = (Spinner) findViewById(R.id.spinnerBox);
arrayBox = getResources().getStringArray(R.array.arrayBox);
codigo = (EditText) findViewById(R.id.editCodigo);
connectionClass = new ConnectionClass();
material = (TextView) findViewById(R.id.lblMaterial);
diametro = (TextView) findViewById(R.id.lblDiametro);
ancho = (TextView) findViewById(R.id.lblAncho);
gama = (TextView) findViewById(R.id.lblGama);
cantidad = (EditText) findViewById(R.id.editCantidad);
Toast.makeText(MainActivity.this, "¡LA PRUEBA BUENA!", Toast.LENGTH_SHORT).show();
ArrayAdapter <CharSequence> adaptador = ArrayAdapter.createFromResource(this, R.array.arrayBox, android.R.layout.simple_spinner_dropdown_item);
spinnerBox.setAdapter(adaptador);
codigo.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
if (codigo.getText().toString().equals("")) {
layoutMuestra.setVisibility(View.GONE);
}
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if (codigo.getText().toString().equals("")) {
layoutMuestra.setVisibility(View.GONE);
}
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (codigo.getText().toString().equals("")) {
layoutMuestra.setVisibility(View.GONE);
}
}
});
}
public void onClickRegistrar(View v) {
Boolean visible = true;
codigoS = codigo.getText().toString();
if(cantidad.getText().toString().equals("")){
cantidad.setText("0");
}
if (codigo.getText().toString().equals("")) {
Toast.makeText(MainActivity.this, "¡Error! ¡Introduce un código!", Toast.LENGTH_SHORT).show();
} else if (codigo.getText().toString().length() != 15 && codigo.getText().toString().length() != 13){
Toast.makeText(MainActivity.this, "¡Error! ¡Introduce un código válido!", Toast.LENGTH_SHORT).show();
}else {
String msg = null;
//SEPARO EL CODIGO EN LOS RESPECTIVO SUBSTRINGS
idMaterial = codigoS.substring(2, 3);
idDiametro = codigoS.substring(3, 7);
idAncho = codigoS.substring(7, 11);
idGama = codigoS.substring(11);
try {
Connection con = connectionClass.CONN();
if (con == null) {
Toast.makeText(MainActivity.this, "¡NO SE HA CONECTADO A LA BD!", Toast.LENGTH_SHORT).show();
msg = "Error in connection with SQL server";
} else {
String query = "select valor from MATERIAL where id='" + idMaterial + "'";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
if(rs.next()){
material.setText(rs.getString(1));
} else {
Toast.makeText(MainActivity.this, "¡NO HA ENCONTRADO EL MATERIAL!", Toast.LENGTH_SHORT).show();
visible = false;
}
query = "select valor from DIAMETRO where id='" + idDiametro + "'";
stmt = con.createStatement();
rs = stmt.executeQuery(query);
if(rs.next()){
diametro.setText(rs.getString(1));
} else {
Toast.makeText(MainActivity.this, "¡NO HA ENCONTRADO EL DIAMETRO!", Toast.LENGTH_SHORT).show();
visible = false;
}
query = "select valor from ANCHO where id='" + idAncho + "'";
stmt = con.createStatement();
rs = stmt.executeQuery(query);
if(rs.next()){
ancho.setText(rs.getString(1));
} else {
Toast.makeText(MainActivity.this, "¡NO HA ENCONTRADO EL ANCHO!", Toast.LENGTH_SHORT).show();
visible = false;
}
query = "select valor from GAMA where id='" + idGama + "'";
stmt = con.createStatement();
rs = stmt.executeQuery(query);
if(rs.next()){
gama.setText(rs.getString(1));
} else {
Toast.makeText(MainActivity.this, "¡NO HA ENCONTRADO LA GAMA!", Toast.LENGTH_SHORT).show();
visible = false;
}
if(visible == true){
layoutMuestra.setVisibility(View.VISIBLE);
}
}
} catch (Exception ex) {
msg = "Exceptions";
}
//GUARDAMOS LOS DATOS EN EL EXCEL
//OBTENGO LA CANTIDAD DE BOX Y DE UNIDADES
int cantBox = Integer.parseInt(arrayBox[spinnerBox.getSelectedItemPosition()]);
int cantUnidad = Integer.parseInt(cantidad.getText().toString());
}
}
}
导入android.os.Bundle;
导入android.support.v7.app.AppActivity;
导入android.text.Editable;
导入android.text.TextWatcher;
导入android.view.view;
导入android.widget.ArrayAdapter;
导入android.widget.EditText;
导入android.widget.LinearLayout;
导入android.widget.Spinner;
导入android.widget.TextView;
导入android.widget.Toast;
导入java.sql.Connection;
导入java.sql.ResultSet;
导入java.sql.Statement;
公共类MainActivity扩展了AppCompatActivity{
私有字符串idDiametro、idMaterial、idAncho、idGama;
私有字符串codigoS;
私人线路布局图;
私有文本视图材料,diametro,ancho,gama;
私人纺纱机;
私有字符串[]arrayBox;
私人编辑文本codigo,cantidad;
私有连接类连接类;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
layoutMuestra=(LinearLayout)findViewById(R.id.layoutMuestra);
喷丝板盒=(喷丝板)findViewById(R.id.spinnerBox);
arrayBox=getResources().getStringArray(R.array.arrayBox);
codigo=(EditText)findViewById(R.id.editCodigo);
connectionClass=新的connectionClass();
材料=(文本视图)findViewById(R.id.LBL材料);
diametro=(TextView)findViewById(R.id.lblDiametro);
ancho=(文本视图)findViewById(R.id.lblAncho);
gama=(TextView)findViewById(R.id.lblGama);
cantidad=(EditText)findViewById(R.id.editCantidad);
Toast.makeText(MainActivity.this,“LA PRUEBA BUENA!”,Toast.LENGTH\u SHORT.show();
ArrayAdapter Adapter=ArrayAdapter.createFromResource(这个,R.array.arrayBox,android.R.layout.simple\u微调器\u下拉菜单\u项);
喷丝头箱。设置适配器(适配器);
codigo.addTextChangedListener(新的TextWatcher(){
公共无效后文本已更改(可编辑){
if(codigo.getText().toString().equals(“”){
layoutMuestra.setVisibility(View.GONE);
}
}
更改前文本之前的公共void(字符序列s、int start、int count、int after){
if(codigo.getText().toString().equals(“”){
layoutMuestra.setVisibility(View.GONE);
}
}
public void onTextChanged(字符序列、int start、int before、int count){
if(codigo.getText().toString().equals(“”){
layoutMuestra.setVisibility(View.GONE);
}
}
});
}
公共注册处(视图五){
布尔可见=真;
codigoS=codigo.getText().toString();
if(cantidad.getText().toString().equals(“”){
cantidad.setText(“0”);
}
if(codigo.getText().toString().equals(“”){
Toast.makeText(MainActivity.this,““Error!”“introduction un código!”,Toast.LENGTH_SHORT.show();
}else if(codigo.getText().toString().length()!=15和&codigo.getText().toString().length()!=13){
Toast.makeText(MainActivity.this,““Error!”介绍uncódigoválido!”,Toast.LENGTH_SHORT.show();
}否则{
字符串msg=null;
//每个子串中都有一个单独的子串
idMaterial=codigoS.子串(2,3);
idDiametro=codigoS.子串(3,7);
idAncho=codigoS.子串(7,11);
idGama=codigoS.子串(11);
试一试{
Connection con=connectionClass.CONN();
如果(con==null){
Toast.makeText(MainActivity.this,“NO SE HA CONECTADO A LA BD!”,Toast.LENGTH_SHORT.show();
msg=“与SQL server连接时出错”;
}否则{
String query=“从物料中选择valor,其中id=”+idMaterial+”;
语句stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(查询);
如果(rs.next()){
material.setText(rs.getString(1));
}否则{
Toast.makeText(MainActivity.this,“无任何内容!”,Toast.LENGTH\u SHORT.show();
可见=假;
}
query=“从DIAMETRO中选择valor,其中id=”+idDiametro+”;
stmt=con.createStatement();
rs=stmt.executeQuery(查询);
如果(rs.next()){
diametro.setText(rs.getString(1));
}否则{
Toast.makeText(MainActivity.this,“NO HA ENCONTRADO EL DIAMETRO!”,Toast.LENGTH_SHORT.show();
可见=假;
}
query=“从ANCHO中选择valor,其中id=”+idAncho+”;
stmt=con.createStatement();
rs=stmt.executeQuery(查询);
如果(rs.next()){
ancho.setText(rs.getString(1));
}否则{
Toast.makeText(MainActivity.this,““不要再来了!”,Toast.LENGTH\u SHORT.show();
可见=假;
}
query=“从GAMA中选择valor,其中id=”+idGama+”;
stmt=con.createStatement();
rs=stmt.executeQuery(查询);
如果(rs.next()){
gama.setText(rs.getString(1));
}否则{
Toast.makeText(MainActivity.this,““不,不,不,不,不,不”,Toast.LENGTH\u SHORT).show();
可见=假;
}
如果(可见==真){
layoutMuestra.setVisibility(View.VISIBLE);
}
}
import android.annotation.SuppressLint;
import android.os.StrictMode;
import android.util.Log;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionClass {
String ip = "192.168.**.**:1433";
String classs = "net.sourceforge.jtds.jdbc.Driver";
String db = "bd****";
String un = "**";
String password = "******";
@SuppressLint("NewApi")
public Connection CONN() {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
Connection conn = null;
String ConnURL = null;
try {
Class.forName(classs);
ConnURL = "jdbc:jtds:sqlserver://" + ip + ";" + "databaseName=" + db + ";user=" + un + ";password="
+ password + ";";
conn = DriverManager.getConnection(ConnURL);
} catch (SQLException se) {
Log.e("ERRO", se.getMessage());
} catch (ClassNotFoundException e) {
Log.e("ERRO", e.getMessage());
} catch (Exception e) {
Log.e("ERRO", e.getMessage());
}
return conn;
}
}
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
public class MainActivity extends AppCompatActivity {
private String idDiametro, idMaterial, idAncho, idGama;
private String codigoS;
private LinearLayout layoutMuestra;
private TextView material, diametro, ancho, gama;
private Spinner spinnerBox;
private String[] arrayBox;
private EditText codigo, cantidad;
private ConnectionClass connectionClass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
layoutMuestra = (LinearLayout) findViewById(R.id.layoutMuestra);
spinnerBox = (Spinner) findViewById(R.id.spinnerBox);
arrayBox = getResources().getStringArray(R.array.arrayBox);
codigo = (EditText) findViewById(R.id.editCodigo);
connectionClass = new ConnectionClass();
material = (TextView) findViewById(R.id.lblMaterial);
diametro = (TextView) findViewById(R.id.lblDiametro);
ancho = (TextView) findViewById(R.id.lblAncho);
gama = (TextView) findViewById(R.id.lblGama);
cantidad = (EditText) findViewById(R.id.editCantidad);
Toast.makeText(MainActivity.this, "¡LA PRUEBA BUENA!", Toast.LENGTH_SHORT).show();
ArrayAdapter <CharSequence> adaptador = ArrayAdapter.createFromResource(this, R.array.arrayBox, android.R.layout.simple_spinner_dropdown_item);
spinnerBox.setAdapter(adaptador);
codigo.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
if (codigo.getText().toString().equals("")) {
layoutMuestra.setVisibility(View.GONE);
}
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if (codigo.getText().toString().equals("")) {
layoutMuestra.setVisibility(View.GONE);
}
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (codigo.getText().toString().equals("")) {
layoutMuestra.setVisibility(View.GONE);
}
}
});
}
public void onClickRegistrar(View v) {
Boolean visible = true;
codigoS = codigo.getText().toString();
if(cantidad.getText().toString().equals("")){
cantidad.setText("0");
}
if (codigo.getText().toString().equals("")) {
Toast.makeText(MainActivity.this, "¡Error! ¡Introduce un código!", Toast.LENGTH_SHORT).show();
} else if (codigo.getText().toString().length() != 15 && codigo.getText().toString().length() != 13){
Toast.makeText(MainActivity.this, "¡Error! ¡Introduce un código válido!", Toast.LENGTH_SHORT).show();
}else {
String msg = null;
//SEPARO EL CODIGO EN LOS RESPECTIVO SUBSTRINGS
idMaterial = codigoS.substring(2, 3);
idDiametro = codigoS.substring(3, 7);
idAncho = codigoS.substring(7, 11);
idGama = codigoS.substring(11);
try {
Connection con = connectionClass.CONN();
if (con == null) {
Toast.makeText(MainActivity.this, "¡NO SE HA CONECTADO A LA BD!", Toast.LENGTH_SHORT).show();
msg = "Error in connection with SQL server";
} else {
String query = "select valor from MATERIAL where id='" + idMaterial + "'";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
if(rs.next()){
material.setText(rs.getString(1));
} else {
Toast.makeText(MainActivity.this, "¡NO HA ENCONTRADO EL MATERIAL!", Toast.LENGTH_SHORT).show();
visible = false;
}
query = "select valor from DIAMETRO where id='" + idDiametro + "'";
stmt = con.createStatement();
rs = stmt.executeQuery(query);
if(rs.next()){
diametro.setText(rs.getString(1));
} else {
Toast.makeText(MainActivity.this, "¡NO HA ENCONTRADO EL DIAMETRO!", Toast.LENGTH_SHORT).show();
visible = false;
}
query = "select valor from ANCHO where id='" + idAncho + "'";
stmt = con.createStatement();
rs = stmt.executeQuery(query);
if(rs.next()){
ancho.setText(rs.getString(1));
} else {
Toast.makeText(MainActivity.this, "¡NO HA ENCONTRADO EL ANCHO!", Toast.LENGTH_SHORT).show();
visible = false;
}
query = "select valor from GAMA where id='" + idGama + "'";
stmt = con.createStatement();
rs = stmt.executeQuery(query);
if(rs.next()){
gama.setText(rs.getString(1));
} else {
Toast.makeText(MainActivity.this, "¡NO HA ENCONTRADO LA GAMA!", Toast.LENGTH_SHORT).show();
visible = false;
}
if(visible == true){
layoutMuestra.setVisibility(View.VISIBLE);
}
}
} catch (Exception ex) {
msg = "Exceptions";
}
//GUARDAMOS LOS DATOS EN EL EXCEL
//OBTENGO LA CANTIDAD DE BOX Y DE UNIDADES
int cantBox = Integer.parseInt(arrayBox[spinnerBox.getSelectedItemPosition()]);
int cantUnidad = Integer.parseInt(cantidad.getText().toString());
}
}
}