Не удалось подключиться к базе данных с Android

Я пытаюсь выполнить следующий код для извлечения данных из базы данных с помощью веб-служб:

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getData(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void getData(){ TextView resultView = (TextView) findViewById(R.id.textView1); String result = ""; InputStream isr = null; try{ HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://HOSTNAME/FILENAME.php"); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); isr = entity.getContent(); } catch(Exception e){ Log.e("log_tag","Error in http connection"+e.toString()); resultView.setText("Couldnt connect to database"); } //converting to string try{ BufferedReader reader = new BufferedReader(new InputStreamReader(isr,"iso-8859-1"),8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null){ sb.append(line + "\n"); } isr.close(); result = sb.toString(); } catch(Exception e){ Log.e("log_tag", "Error converting result"+ e.toString()); } //parse data try{ String s = ""; JSONArray jArray = new JSONArray(result); for(int i = 0;i<jArray.length();i++){ JSONObject json = jArray.getJSONObject(i); s = s + "St.ID" + json.getString("StId") + "\n " +json.getString("StName") + "\n" + json.getString("StMail"); } resultView.setText(s); } catch(Exception e){ Log.e("Log_tage", "Error Parsing Data"+e.toString()); } } 

Но возвращается ошибка: Не удалось подключиться к базе данных.

И вот вывод LogCat:

11-14 20: 10: 35.057: E / log_tag (5323): ошибка в http connectionandroid.os.NetworkOnMainThreadException

11-14 20: 10: 35.057: E / log_tag (5323): Ошибка преобразования resultjava.lang.NullPointerException: lock == null

11-14 20: 10: 35.057: E / Log_tage (5323): Ошибка при обработке Dataorg.json.JSONException: Конец ввода символа 0

Я добавил php-файл на какой-либо веб-сервис, и он работает хорошо, но я думаю, что это касается URL-адреса HttpPost, есть ли определенный формат для URL-адреса HttpPost или это тот же URL-адрес, что и в веб-службе?

PHP-файл:

  <?php $con = mysql_connect("HOST","USERNAME","PASSWORD"); if (!$con) { die('Could not Connect:'. mysql_error()); } mysql_select_db("database_name",$con); $result = mysql_query("SELECT * FROM table_name"); while($row = mysql_fetch_assoc($result)) { $output[]=$row; } print(json_encode($output)); mysql_close($con); ?> 

Пожалуйста, помогите с этим.

Специфического формата URL-адреса HttpPost нет, это тот же URL-адрес, что и в веб-службе.

Вы должны использовать AsyncTask для решения ошибки «Не удалось подключиться к базе данных».

Вот ваш код с использованием AsynTask, также вы должны установить текст TextView в методе onPostExecute , как показано:

 RetrievingDataFromDatabase retrievingTask; TextView resultView; String s; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); retrievingTask = new RetrievingDataFromDatabase(); retrievingTask.execute((Void) null); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void getData(){ resultView = (TextView) findViewById(R.id.textView1); String result = ""; InputStream isr = null; try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://HOSTNAME/FILENAME.php"); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); isr = entity.getContent(); } catch(Exception e) { Log.e("log_tag", "Error in http connection " + e.toString()); resultView.setText("Couldnt connect to database"); } //converting to string try { BufferedReader reader = new BufferedReader(new InputStreamReader(isr, "iso-8859-1"), 8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } isr.close(); result = sb.toString(); } catch(Exception e) { Log.e("log_tag", "Error converting result " + e.toString()); } //parse data try { s = ""; JSONArray jArray = new JSONArray(result); for(int i = 0; i < jArray.length(); i++){ JSONObject json = jArray.getJSONObject(i); s = s + "St. ID" + json.getString("StId") + "\n " + json.getString("StName") + "\n" + json.getString("StMail"); } } catch(Exception e) { Log.e("Log_tage", "Error Parsing Data" + e.toString()); } } class RetrievingDataFromDatabase extends AsyncTask<Void, Void, Boolean> { @Override protected Boolean doInBackground(Void... params) { getData(); return null; } @Override protected void onPostExecute(Boolean result) { super.onPostExecute(result); resultView.setText(s); } } 

Проблема решена и данные получены с помощью кода @Carlo и редактирования следующей строки кода:

 HttpPost httppost = new HttpPost("http://HOSTNAME/FILENAME.php"); 

чтобы:

 HttpGet httppost = new HttpGet("http://HOSTNAME/FILENAME.php"); 

как упоминалось в моем коде, я хотел получить данные из URL-адреса, не отправляющего данные.

HttpPost> используется для отправки данных на указанный ресурс. HttpGet> используется для извлечения данных из указанного ресурса.

Спасибо всем за вашу помощь.