安卓程序在打开之前就崩溃了

时间:2018-05-23 04:19:07

标签: android

我刚开始使用Android Studio并且已经遇到问题,我需要通过我的手机连接到sqlserver上的数据库,但是在整个事情开始工作之前崩溃了,我需要一些帮助,这是代码:

  import android.os.Bundle;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.view.View;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

public class Farmaciapp extends AppCompatActivity {
    EditText edtMed =(EditText)findViewById(R.id.edtMedicamento);
    String ConsulMed = edtMed.getText().toString();
    public void Meds (View v){
        Connection conexion = null;
        String url = "jdbc:jtds:sqlserver://192.168.1.69;databaseName=Medicamentos;";
        String query = "Select Descripcion from Medicina where Nombre = '" + ConsulMed + "'";
        try {
            Connection con = DriverManager.getConnection(url);
            Statement state = con.createStatement();
            ResultSet resultado = state.executeQuery(query);
            while (resultado.next()){
                String res = resultado.getString(1);
                TextView Explicacion = (TextView) findViewById(R.id.mltExplic);
                Explicacion.setText(res);
            }
        }catch (Exception e){
            Toast.makeText(getApplicationContext(), e.getMessage() , Toast.LENGTH_SHORT).show();
        }

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_farmaciapp);
    }
}

1 个答案:

答案 0 :(得分:1)

原因是你正试图访问尚未创建的避风港。换句话说,我们无法引用或调用 findViewById ,直到布局膨胀为止。

所以请进行以下更改

  public class Farmaciapp extends AppCompatActivity {

    EditText edtMed;
    String ConsulMed = edtMed.getText().toString();

    public void Meds (View v){
        Connection conexion = null;
        String url = "jdbc:jtds:sqlserver://192.168.1.69;databaseName=Medicamentos;";
        String query = "Select Descripcion from Medicina where Nombre = '" + ConsulMed + "'";
        try {
            Connection con = DriverManager.getConnection(url);
            Statement state = con.createStatement();
            ResultSet resultado = state.executeQuery(query);
            while (resultado.next()){
                String res = resultado.getString(1);
                TextView Explicacion = (TextView) findViewById(R.id.mltExplic);
                Explicacion.setText(res);
            }
        }catch (Exception e){
            Toast.makeText(getApplicationContext(), e.getMessage() , Toast.LENGTH_SHORT).show();
        }

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_farmaciapp);
        edtMed =(EditText)findViewById(R.id.edtMedicamento);
    }
}

确保在onCreate之后访问edtMed而不是在它之前工作。 onCreate()是活动扩展布局的方式。