У меня есть база данных mysql на localhost: 88 с именем «test» с именем пользователя «root» и таблицей «example».
Я пытаюсь получить данные в моем приложении для Android, используя php-скрипт с методом $ _POST. Но это просто не работает нормально, и я не могу понять, почему. Вот мой код Java:
public class MainActivity extends Activity implements View.OnClickListener
{
TextView txt;
EditText editText;
ProgressBar pb;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
txt = (TextView) findViewById(R.id.textView);
editText = (EditText) findViewById(R.id.editText);
pb = (ProgressBar) findViewById(R.id.progressBar);
button = (Button) findViewById(R.id.button);
pb.setVisibility(View.GONE);
button.setOnClickListener(this);
}
public void onClick(View v)
{
if(editText.getText().toString().length()<1)
Toast.makeText(this, "Enter something!", Toast.LENGTH_SHORT);
else{
pb.setVisibility(View.VISIBLE);
new sendData().execute(editText.getText().toString());
}
}
class sendData extends AsyncTask<String, Integer, Double>
{
@Override
protected Double doInBackground(String... strings) {
postData(strings[0]);
return null;
}
@Override
protected void onPostExecute(Double aDouble) {
pb.setVisibility(View.GONE);
Toast.makeText(getApplicationContext(), "command sent", Toast.LENGTH_SHORT).show();
}
@Override
protected void onProgressUpdate(Integer... values) {
pb.setProgress(values[0]);
}
public void postData(String valueIWantToSend)
{
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("http://10.0.2.2/basicphp/setData.php");
httpPost.addHeader("content-type", "application/json");
try
{
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("name", valueIWantToSend));
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpClient.execute(httpPost);
Log.d("postData","response" + response.getEntity());
}
catch(IOException e){
Log.wtf("postData", e.getMessage());
}
}
}
А вот мой скрипт php:
<?php
$con = mysqli_connect('127.0.0.1:3306', 'root', '', 'test');
if(mysqli_connect_errno())
echo "Failed to connect to MySQL: " . mysqli_connect_error();
$name = mysqli_real_escape_string($con, $_POST['name']);
$sql =
"INSERT INTO `example` (name) VALUES ("$name");";
mysqli_query($con, $sql) or die('Error occured: ' . mysqli_error($con));
echo 'Values inserted successfully!';
mysqli_close($con);
?>
LogCat:
09-22 19:25:16.916 2170-2170/my.com.jsontry D/dalvikvm﹕ Late-enabling CheckJNI
09-22 19:25:17.020 2170-2170/my.com.jsontry E/Trace﹕ error opening trace file: No such file or directory (2)
09-22 19:25:17.112 2170-2170/my.com.jsontry D/libEGL﹕ loaded /system/lib/egl/libEGL_emulation.so
09-22 19:25:17.116 2170-2170/my.com.jsontry D/﹕ HostConnection::get() New Host Connection established 0xb9620558, tid 2170
09-22 19:25:17.132 2170-2170/my.com.jsontry D/libEGL﹕ loaded /system/lib/egl/libGLESv1_CM_emulation.so
09-22 19:25:17.132 2170-2170/my.com.jsontry D/libEGL﹕ loaded /system/lib/egl/libGLESv2_emulation.so
09-22 19:25:17.220 2170-2170/my.com.jsontry W/EGL_emulation﹕ eglSurfaceAttrib not implemented
09-22 19:25:17.256 2170-2170/my.com.jsontry D/OpenGLRenderer﹕ Enabling debug mode 0
09-22 19:25:24.400 2170-2170/my.com.jsontry W/EGL_emulation﹕ eglSurfaceAttrib not implemented
09-22 19:26:28.272 2170-2188/my.com.jsontry A/postData﹕ Connection to http://10.0.2.2 refused
09-22 19:26:28.292 2170-2173/my.com.jsontry D/dalvikvm﹕ GC_CONCURRENT freed 111K, 9% free 2599K/2852K, paused 10ms+2ms, total 20ms
Очевидно, что я делаю что-то не так, поэтому, пожалуйста, помогите мне понять, что именно и исправить мои ошибки. Я искал похожие вопросы, но до сих пор не нашел ответа. Я был бы очень признателен, если бы вы могли объяснить все это более или менее простыми словами, потому что я довольно новичок в программировании для Android и PHP.
У меня есть база данных mysql на localhost: 88
затем
HttpPost httpPost = new HttpPost("http://10.0.2.2/basicphp/setData.php");
Вы нигде не указываете порт …
Так:
Connection to http://10.0.2.2 refused
Это потому, что вы пытаетесь использовать неправильный порт, по умолчанию это будет 80, а не 88.
Других решений пока нет …