Я новичок в разработке Android. В рамках более крупного проекта я хочу вставить данные с устройства android на веб-сервер. Поэтому я сделал некоторые исследования и статьи, такие как The article from androidhive и this article from codeproject, были очень полезны при разработке тестового приложения, которое вставляется в базу данных mysql db, которая находится на удаленном веб-сервере.Вставка в mysql из приложения для Android
Вот мой андроид код
ConnectivityManager connMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()){
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://xxxxxxxx.in/installment.php");
try{
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("name", editTextCustomer.getText().toString()));
nameValuePairs.add(new BasicNameValuePair("amount", editTextAmount.getText().toString()));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();
Log.i("postData", response.getStatusLine().toString());
}catch(Exception e){
Log.e("log_tag", "Error in http connection"+e.toString());
}
}
else {
Toast.makeText(PayBillActivity.this, "Internet Access, Denied!!", Toast.LENGTH_LONG).show();
}
Вот PHP код
<?php
/*
* Following code will create a new product row
* All product details are read from HTTP Post Request
*/
// array for JSON response
$response = array();
// check for required fields
if (isset($_POST['name']) && isset($_POST['amount'])) {
$name = $_POST['name'];
$amount = $_POST['amount'];
$con=mysqli_connect("localhost","db_user","passwd","db_name");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql="INSERT INTO installment (name, amount) VALUES ('$_POST[name]','$_POST[amount]')";
if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
echo "1 record added";
// check if row inserted or not
if ($sql) {
// successfully inserted into database
$response["success"] = 1;
$response["message"] = "Installment made successfully";
// echoing JSON response
echo json_encode($response);
} else {
// failed to insert row
echo $result;
$response["success"] = 0;
$response["message"] = "Oops! An error occurred.";
// echoing JSON response
echo json_encode($response);
}
} else {
// required field is missing
//$amount = 1000;
//echo $amount;
$response["success"] = 0;
$response["message"] = "Required field(s) is missing";
// echoing JSON response
echo json_encode($response);
}
?>
при запуске приложения, я получаю этот «NetworkOnMainThreadException» исключение, и в результате ни одна строка не является добавлено. Но его работа отлично работает с HTML POST.
Может ли кто-нибудь сказать мне, где проблема в моем коде? Заранее спасибо! :)
Android не позволяет/сильно отговаривают вас от этого сеть связанных процессов в главном потоке. Связанные с сетью процессы могут задерживать приложение в течение длительного времени, если выполняются в основном потоке. Рекомендуется, чтобы вы ввели такие процессы в асинхронный поток. – Razgriz
Если вы поместите «NetworkOnMainThreadException» в поле поиска на этом сайте, вы получите 342 результата. Это должно помочь вам – NickT