Android 应用程序在模拟器上运行正常,但在真实设备上崩溃
Android Application works correctly on emulator but crashes on real device
我正在开发一个使用 MySQL 数据库和 json 的 android 应用程序,它可以在模拟器上正常运行,但是当我在我的设备 (Galaxy S5) 上启动它时,我'我面临着一个力量关闭
这是我对服务器的请求并获得 json 个对象:
btnFaalSazi.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String validatePhoneNumber = phoneNumber.getText().toString();
if (validatePhoneNumber.matches("^(?:0\d{10}|9\d{9})$")) {
txtError.setText("");
structUsers.register_number = phoneNumber.getText().toString();
String phone = structUsers.register_number;
Log.i("LOG", phone);
Log.i("LOG", "HELOOOOOO");
final ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("register_number", phone));
String result = Webservice.readUrl("http://192.168.10.110:2233/api/register", params);
if (result != null) {
try {
G.users.clear();
JSONObject object = new JSONObject(result);
String status = object.optString("status");
String code = object.optString("code");
String message = object.optString("message");
Log.i("LOG", "status hast " + status);
Log.i("LOG", "code hast " + code);
Log.i("LOG", "mesage hast " + message);
if (status != null && code != null) {
if (Integer.parseInt(status) == -1) {
Intent intent = new Intent(ActivityRegisterNumber.this, ActivityRegisterCode.class);
intent.putExtra("REGISTERNUMBER", structUsers.register_number);
ActivityRegisterNumber.this.startActivity(intent);
}
}
if (status != null && message != null) {
if (Integer.parseInt(status) == 100) {
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
Log.i("LOG", "after error 100");
} else if (Integer.parseInt(status) == 101) {
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
Log.i("LOG", "after error 101");
} else if (Integer.parseInt(status) == 102) {
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
Log.i("LOG", "after error 102");
} else if (Integer.parseInt(status) == 103) {
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
Log.i("LOG", "after error 103");
}
}
}
catch (JSONException e) {
e.printStackTrace();
}
}
} else {
txtError.setText("Wrong phone number");
}
}
});
我认为应用程序在执行此行时会崩溃:
String result = Webservice.readUrl("http://192.168.10.110:2233/api/register", params);
这是我的网络服务模块:
public class Webservice {
public static String readUrl(String url, ArrayList<NameValuePair> params) {
try {
HttpClient client = new DefaultHttpClient();
HttpPost method = new HttpPost(url);
if (params != null) {
method.setEntity(new UrlEncodedFormEntity(params));
}
HttpResponse response = client.execute(method);
InputStream inputStream = response.getEntity().getContent();
String result = convertInputStreamToString(inputStream);
return result;
}
catch (ClientProtocolException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static String convertInputStreamToString(InputStream inputStream) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder builder = new StringBuilder();
String line = "";
while ((line = reader.readLine()) != null) {
builder.append(line);
}
return builder.toString();
}
catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
您是否为您的应用程序授予了权限?某些安全软件会阻止您的应用程序访问网络。
您的网络服务的 url 在您的机器上是本地的。
模拟器工作正常,因为它可能在同一个网络上。
但是您的设备无法访问此 url: http://192.168.10.110:2233/。
这就是为什么它会出现一些超时错误并且您的应用程序崩溃的原因。
如果您想在您的设备上进行测试,可能需要使用公共网络或使用 wifi 和一些代理工具,例如 Charles
希望您现在清楚了这个问题。
我找到了答案,所以我会向 post 稍后阅读这篇文章的人解释,
在android3之后,我们应该使用Asynctask从webservice发送和接收。
我的模拟器是 android 2.2,我的设备是 android 4.4,所以应用程序在模拟器上运行完美,但在设备上崩溃。
符合
String result = Webservice.readUrl("http://192.168.10.110:2233/api/register", params);
你必须为你的设备获取 ipconfig (phone) 不要为你的 emu 使用相同的 ip 配置
我正在开发一个使用 MySQL 数据库和 json 的 android 应用程序,它可以在模拟器上正常运行,但是当我在我的设备 (Galaxy S5) 上启动它时,我'我面临着一个力量关闭 这是我对服务器的请求并获得 json 个对象:
btnFaalSazi.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String validatePhoneNumber = phoneNumber.getText().toString();
if (validatePhoneNumber.matches("^(?:0\d{10}|9\d{9})$")) {
txtError.setText("");
structUsers.register_number = phoneNumber.getText().toString();
String phone = structUsers.register_number;
Log.i("LOG", phone);
Log.i("LOG", "HELOOOOOO");
final ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("register_number", phone));
String result = Webservice.readUrl("http://192.168.10.110:2233/api/register", params);
if (result != null) {
try {
G.users.clear();
JSONObject object = new JSONObject(result);
String status = object.optString("status");
String code = object.optString("code");
String message = object.optString("message");
Log.i("LOG", "status hast " + status);
Log.i("LOG", "code hast " + code);
Log.i("LOG", "mesage hast " + message);
if (status != null && code != null) {
if (Integer.parseInt(status) == -1) {
Intent intent = new Intent(ActivityRegisterNumber.this, ActivityRegisterCode.class);
intent.putExtra("REGISTERNUMBER", structUsers.register_number);
ActivityRegisterNumber.this.startActivity(intent);
}
}
if (status != null && message != null) {
if (Integer.parseInt(status) == 100) {
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
Log.i("LOG", "after error 100");
} else if (Integer.parseInt(status) == 101) {
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
Log.i("LOG", "after error 101");
} else if (Integer.parseInt(status) == 102) {
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
Log.i("LOG", "after error 102");
} else if (Integer.parseInt(status) == 103) {
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
Log.i("LOG", "after error 103");
}
}
}
catch (JSONException e) {
e.printStackTrace();
}
}
} else {
txtError.setText("Wrong phone number");
}
}
});
我认为应用程序在执行此行时会崩溃:
String result = Webservice.readUrl("http://192.168.10.110:2233/api/register", params);
这是我的网络服务模块:
public class Webservice {
public static String readUrl(String url, ArrayList<NameValuePair> params) {
try {
HttpClient client = new DefaultHttpClient();
HttpPost method = new HttpPost(url);
if (params != null) {
method.setEntity(new UrlEncodedFormEntity(params));
}
HttpResponse response = client.execute(method);
InputStream inputStream = response.getEntity().getContent();
String result = convertInputStreamToString(inputStream);
return result;
}
catch (ClientProtocolException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static String convertInputStreamToString(InputStream inputStream) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder builder = new StringBuilder();
String line = "";
while ((line = reader.readLine()) != null) {
builder.append(line);
}
return builder.toString();
}
catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
您是否为您的应用程序授予了权限?某些安全软件会阻止您的应用程序访问网络。
您的网络服务的 url 在您的机器上是本地的。 模拟器工作正常,因为它可能在同一个网络上。
但是您的设备无法访问此 url: http://192.168.10.110:2233/。 这就是为什么它会出现一些超时错误并且您的应用程序崩溃的原因。
如果您想在您的设备上进行测试,可能需要使用公共网络或使用 wifi 和一些代理工具,例如 Charles
希望您现在清楚了这个问题。
我找到了答案,所以我会向 post 稍后阅读这篇文章的人解释,
在android3之后,我们应该使用Asynctask从webservice发送和接收。
我的模拟器是 android 2.2,我的设备是 android 4.4,所以应用程序在模拟器上运行完美,但在设备上崩溃。
符合
String result = Webservice.readUrl("http://192.168.10.110:2233/api/register", params);
你必须为你的设备获取 ipconfig (phone) 不要为你的 emu 使用相同的 ip 配置