Android应用程序在模拟器上工作但不在设备上

时间:2015-05-01 19:50:27

标签: java android mysql jdbc

我创建了一个连接到本地MySQL数据库的Android应用程序,以通过JDBC检索一些示例数据。 当我使用模拟器运行应用程序时,它工作正常并加载数据。 当我从我的设备运行应用程序时,它在加载数据时冻结,而没有来自logcat的错误。 这是代码:

   import java.sql.Connection;
   import java.sql.DriverManager;
   import java.sql.ResultSet;
   import java.sql.SQLException;
   import java.sql.Statement;
   import android.app.Activity;
   import android.app.ProgressDialog;
   import android.os.AsyncTask;
   import android.os.Bundle;
   import android.view.Menu;
   import android.view.MenuItem;
   import android.view.View;
   import android.view.View.OnClickListener;
   import android.widget.Button;
   import android.widget.TextView;
   import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener{
Button bottone;
boolean connected = false;
private TextView nome1;
private TextView cognome1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    bottone = (Button)findViewById(R.id.button1);
    bottone.setOnClickListener(this);
    nome1 = (TextView) findViewById(R.id.text_name);
    cognome1 = (TextView) findViewById(R.id.text_surname);
}
class ConnectAsync extends AsyncTask<String, Void, String> {

private String name;
private String surname;
private ProgressDialog myProgress;

@Override
protected void onPreExecute()
{
    super.onPreExecute();
    myProgress = ProgressDialog.show(MainActivity.this, "Wait", "Loading..");
}

@Override
protected String doInBackground(String... urls) {

        String url = "jdbc:mysql://192.168.56.1/prova";
        String user = "myuser";
        String password = "mypsw";

        Connection connection = null;

        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(url,user,password);
        } catch (ClassNotFoundException e) {
            System.out.println("Driver non caricato");
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("Errore con url e credenziali!");

        }

        if(connection!= null)
        {System.out.println("Connessione riuscita!");
        connected = true;}
        ResultSet rs = null;

        try {
            Statement stmt = connection.createStatement();
            String sql = "SELECT NOME,COGNOME FROM amici";
            rs = stmt.executeQuery(sql);
            if(!rs.next())
            {System.out.println("Vuota");}
            else
            {
                do{
                    name = rs.getString("NOME");
                    surname = rs.getString("COGNOME");
                }while(rs.next());}
        } catch (SQLException e) {
            System.out.println("Query error");
        }
        try {
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }

         if(connected)
                return "Connessione riuscita";
            else return "Connessione non riuscita";
}
    @Override
    protected void onPostExecute(String result) 
    {   myProgress.dismiss();
        if(result.equals("Connessione riuscita"))
            {Toast.makeText(MainActivity.this, result,    Toast.LENGTH_SHORT).show();
            nome1.setText(name);
            cognome1.setText(surname);}

            else 
                Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();
    }
}
public void connectToDB(View view)
{
     ConnectAsync task = new ConnectAsync();
     task.execute();}
      @Override
      public void onClick(View v) {
      connectToDB(v);
      }
 }

我在JDBC字符串中使用的IP地址是我输入的IP地址&#34; ipconfig&#34;在Windows cmd(IPv4)中。 应用程序只显示一个进度对话框,直到连接完成,然后从数据库中检索数据,将其放入两个文本视图中。

正如我所说,当我尝试使用Android模拟器进行连接时,它连接并运行正常,但是当我在我的设备上运行应用程序时,应用程序冻结以获取连接(进度对话框继续加载)并且没有给出错误logcat的。 我检查了所需的最低SDK,它与我的手机Android版本匹配。

我认为这与MySQL数据库处理来自模拟器和设备的连接请求的方式有关......感谢任何帮助。谢谢。

P.S:MySQL配置文件(my.ini)具有以下参数:

 ....

 [mysqld]
 bind-address= *
 # skip-networking
 ...
 ...
 wait_timeout = 30
 interactive_timeout = 30
 connect_timeout = 30

0 个答案:

没有答案