Java Android应用程序在模拟器上工作,但不在设备上工作
我创建了一个Android应用程序,它连接到本地MySQL数据库,通过JDBC检索一些示例数据。 当我使用仿真器运行应用程序时,它工作正常并加载数据。 当我从我的设备运行应用程序时,它会在加载数据时冻结,不会出现来自logcat的错误。 代码如下:Java Android应用程序在模拟器上工作,但不在设备上工作,java,android,mysql,jdbc,Java,Android,Mysql,Jdbc,我创建了一个Android应用程序,它连接到本地MySQL数据库,通过JDBC检索一些示例数据。 当我使用仿真器运行应用程序时,它工作正常并加载数据。 当我从我的设备运行应用程序时,它会在加载数据时冻结,不会出现来自logcat的错误。 代码如下: import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLExceptio
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);
}
}
让我问一个愚蠢的问题,你的手机连接到你的wifi吗?是的,他们共享相同的wifi。我唯一的疑问是我插在家里的wifi信号扩展器,但我不认为它会导致这种问题。只要它们都在同一个网络(wifi)上,你应该能够从手机连接到本地机器,反之亦然。如果不确定,请关闭移动服务并启用wifi访问互联网,这将回答您的扩展器问题。注意,如果它在模拟器上工作,而不是在设备上工作,请不要先发布代码问题。相反,请验证设备是否可以与本地网络联系。然后,如果测试正常,您的程序可能有问题。通过编写一个非常简单的程序连接到本地机器上运行的Web服务器(或服务)。Rmember,验证您的目标是解决问题-因此,首先,验证问题是什么。(提示:可能不是您的程序已经在本地机器的仿真器上运行失败)
....
[mysqld]
bind-address= *
# skip-networking
...
...
wait_timeout = 30
interactive_timeout = 30
connect_timeout = 30