Android数据库连接错误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

(首先,我不是以英语为母语的人,所以我的英语很差)

我一直在开发一款android应用程序。基本上,我需要连接到SQL Server 2012 express数据库。在我使用不同的API 23之前,所有这些都可以正常工作。我在其他话题上发现了这个错误,但没有一个答案对我有效。这就是错误:

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());

    }
}

}