es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se pudo ejecutar el método para android:onClick en Android Studio.

Estoy intentando mostrar una base de datos en Android Studio usando Java con ListView. Mi aplicación se está bloqueando y no sé por qué. En la actividad Home he insertado un botón (onClick-getData) y un ListView. Mi código es:

HomeActivity.java (MainActivity es el splasher)

package com.example.acam<em>try</em>2;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import java.util.List;
import java.util.Map;

public class HomeActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
    }

    SimpleAdapter ad;

    public void  GetData(View v) {
        ListView lstview = (ListView) findViewById(R.id.listView1);
        List<><string, string="">> Mydatalist = null;
        ListItem Mydata = new ListItem();
        Mydatalist=Mydata.getlist();
        String[] Fromw = {"City", "Id_Of_City"};
        int[] Tow = {R.id.City_name, R.id.City_id};
        ad = new SimpleAdapter(HomeActivity.this, Mydatalist, R.layout.listlayout, Fromw, Tow);
        lstview.setAdapter(ad);
    }
}

ConnectionToCities donde conecto la base de datos:

package com.example.acam_try_2;

import android.annotation.SuppressLint;
import android.os.StrictMode;
import android.util.Log;
import java.sql.Connection;
import java.sql.DriverManager;

public class ConnectionToCities {
    ConnectionToCities connection;
    String ip, port, db, un, pass;

    @SuppressLint("NewApi")
    public ConnectionToCities conclass() {
        ip = "192.168.3.10";
        db = "Cities_names";
        un = "Stefan";
        pass = "stefan";
        port = "1433";
        StrictMode.ThreadPolicy tpolicy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(tpolicy);
        Connection con = null;
        String ConnectionURL = null;
        try {
            Class.forName("net.sourceforge.jtds.jdbc.Driver");
            ConnectionURL= "jdbc:jtds:sqlserver://"+ip+":"+port+";"+ "databaseName="+ db+ ";user="+un+";password="+pass+";";
            con = DriverManager.getConnection(ConnectionURL);
        } catch (Exception ex) {
            Log.e("Error :", ex.getMessage());
        }
        return (ConnectionToCities) con;
    }
}

ListItem.java:

package com.example.acam_try_2;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.sql.Connection;

public class ListItem {
    Connection connection;
    String ConnectionResult = "";
    Boolean isSuccess = false;

    public List<><string, string="">> getlist() {
        List<><string, string="">> data = null;
        data = new ArrayList<><string, string="">>();
        try {
            ConnectionToCities connection_to_cities = new ConnectionToCities();
            connection = (Connection) connection_to_cities.conclass();
            if (connection != null) {
                String qu = "SELECT * FROM Cities";
                Statement statement = connection.createStatement();
                ResultSet resultSet = statement.executeQuery(qu);
                while (resultSet.next()) {
                    Map<string, string=""> dtname = new HashMap<string, string="">();
                    dtname.put("City_name", resultSet.getString("City_name"));
                    dtname.put("City_id", resultSet.getString("City_id"));
                    data.add(dtname);
                }
                ConnectionResult = "Succes";
                isSuccess = true;
                connection.close();
            } else {
                ConnectionResult = "Failed";
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return data;
    }
}

listlayout.xml:

“`

<androidx.constraintlayout.widget.constraintlayout xmlns:android=”http://schemas.android.com/apk/res/android” android:layout_width=”match_parent” android:layout_height=”match_parent” xmlns:tools=”http://schemas.android.com/tools”>

El error parece ser causado por una ClassCastException en el método conclass de Connection_to_Cities.java. El código está intentando convertir un objeto net.sourceforge.jtds.jdbc.JtdsConnection en un objeto com.example.acam_try_2.Connection_to_Cities, lo cual no es posible.

Para solucionar este error, debe cambiar el tipo de retorno del método conclass a Connection y eliminar la conversión a Connection_to_Cities. Además, asegúrese de que el controlador JDBC esté correctamente agregado a su proyecto.

Aquí hay una versión actualizada de la clase Connection_to_Cities.java:

package com.example.acam_try_2;

import android.annotation.SuppressLint;
import android.os.StrictMode;
import android.util.Log;

import java.sql.Connection;
import java.sql.DriverManager;

public class Connection_to_Cities {

    String ip, port, db, un, pass;

    @SuppressLint("NewApi")
    public Connection conclass() {
        ip = "192.168.3.10";
        db = "Cities_names";
        un = "Stefan";
        pass = "stefan";
        port = "1433";

        StrictMode.ThreadPolicy tpolicy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(tpolicy);

        Connection con = null;
        String ConnectionURL = null;
        try {
            Class.forName("net.sourceforge.jtds.jdbc.Driver");

            ConnectionURL = "jdbc:jtds:sqlserver://" + ip + ":" + port + ";" + "databaseName=" + db + ";user="
                    + un + ";password=" + pass + ";";

            con = DriverManager.getConnection(ConnectionURL);
        } catch (Exception ex) {
            Log.e("Error: ", ex.getMessage());
        }

        return con;
    }
}

Además, asegúrese de haber agregado los siguientes permisos a su archivo AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>

Una vez que haya realizado estos cambios, intente ejecutar su aplicación nuevamente y vea si se resuelve el error.

Comments are closed.