Intereting Posts
PHP pthreads – общие объекты Каков наилучший способ реализации коррекции опечаток в поиске в php / mysql? CakePHP – успех с $ hasOne, сбой с $ hasMany Simplexml: синтаксический анализ HTML оставляет вложенные элементы внутри элемента с текстовым узлом Как отменить доступ к Microsoft APP для пользователя в php Переписать расширение файла BUT запретить прямой доступ к файлу Есть ли способ вернуть HTML в PHP-функцию? (без построения возвращаемого значения в виде строки) Странное поведение сеанса – исчезновение сеанса mysqli подготовил операторы и mysqli_real_escape_string mysql | Запрос из пустой колонки и FIND_IN_SET Отображать изображения по очереди со следующей и предыдущей функциональностью Отправка нескольких уведомлений о переносе iphone + APNS + PHP + Tutorial Как настроить php для включения pdo и включить mysqli в CentOS? Получение ссылки на последний элемент массива Каков правильный способ сравнить две даты в php?

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

Я пытаюсь получить основы Android-приложения, которое отправляет и получает данные с сервера MySQL (моя реализация не будет иметь ничего общего с этим примером обучения). Вот код:

package com.davekelley.polling; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.ParseException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.ActionBar; import android.app.Activity; import android.app.ListActivity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; import android.widget.Toast; public class Chart extends Activity { JSONArray jArray; String result = null; InputStream is = null; StringBuilder sb=null; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.chartfragment); ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); //http post try{ HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://www.davidjkelley.net/city.php"); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); }catch(Exception e){ Log.e("log_tag", "Error in http connection "+e.toString()); } //convert response to string try{ BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); sb = new StringBuilder(); sb.append(reader.readLine() + "\n"); String line="0"; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); result=sb.toString(); }catch(Exception e){ Log.e("log_tag", "Error converting result "+e.toString()); } //paring data int ct_id; String ct_name; try{ jArray = new JSONArray(result); JSONObject json_data=null; for(int i=0;i<jArray.length();i++){ json_data = jArray.getJSONObject(i); ct_id=json_data.getInt("CITY_ID"); ct_name=json_data.getString("CITY_NAME"); } } catch(JSONException e1){ Toast.makeText(getBaseContext(), "No City Found" ,Toast.LENGTH_LONG).show(); } catch (ParseException e1) { e1.printStackTrace(); } } } 

И вот код для XML-файла «chartfragment»:

 <?xml version="1.0" encoding="utf-8"?> <ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/list" android:layout_width="match_parent" android:layout_height="wrap_content" > <!-- <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/chartTitleTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:gravity="center"/> --> </ListView> 

И вот проблемы LogCat, с которыми я сталкиваюсь:

 03-26 20:34:13.782: E/log_tag(1025): Error in http connection android.os.NetworkOnMainThreadException 03-26 20:34:13.802: E/log_tag(1025): Error converting result java.lang.NullPointerException 03-26 20:34:13.802: D/AndroidRuntime(1025): Shutting down VM 03-26 20:34:13.802: W/dalvikvm(1025): threadid=1: thread exiting with uncaught exception (group=0x409c01f8) 03-26 20:34:13.832: E/AndroidRuntime(1025): FATAL EXCEPTION: main 03-26 20:34:13.832: E/AndroidRuntime(1025): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.davekelley.polling/com.davekelley.polling.Chart}: java.lang.NullPointerException 03-26 20:34:13.832: E/AndroidRuntime(1025): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 03-26 20:34:13.832: E/AndroidRuntime(1025): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 03-26 20:34:13.832: E/AndroidRuntime(1025): at android.app.ActivityThread.access$600(ActivityThread.java:123) 03-26 20:34:13.832: E/AndroidRuntime(1025): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 03-26 20:34:13.832: E/AndroidRuntime(1025): at android.os.Handler.dispatchMessage(Handler.java:99) 03-26 20:34:13.832: E/AndroidRuntime(1025): at android.os.Looper.loop(Looper.java:137) 03-26 20:34:13.832: E/AndroidRuntime(1025): at android.app.ActivityThread.main(ActivityThread.java:4424) 03-26 20:34:13.832: E/AndroidRuntime(1025): at java.lang.reflect.Method.invokeNative(Native Method) 03-26 20:34:13.832: E/AndroidRuntime(1025): at java.lang.reflect.Method.invoke(Method.java:511) 03-26 20:34:13.832: E/AndroidRuntime(1025): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 03-26 20:34:13.832: E/AndroidRuntime(1025): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 03-26 20:34:13.832: E/AndroidRuntime(1025): at dalvik.system.NativeStart.main(Native Method) 03-26 20:34:13.832: E/AndroidRuntime(1025): Caused by: java.lang.NullPointerException 03-26 20:34:13.832: E/AndroidRuntime(1025): at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116) 03-26 20:34:13.832: E/AndroidRuntime(1025): at org.json.JSONTokener.nextValue(JSONTokener.java:94) 03-26 20:34:13.832: E/AndroidRuntime(1025): at org.json.JSONArray.<init>(JSONArray.java:87) 03-26 20:34:13.832: E/AndroidRuntime(1025): at org.json.JSONArray.<init>(JSONArray.java:103) 03-26 20:34:13.832: E/AndroidRuntime(1025): at com.davekelley.polling.Chart.onCreate(Chart.java:68) 03-26 20:34:13.832: E/AndroidRuntime(1025): at android.app.Activity.performCreate(Activity.java:4465) 03-26 20:34:13.832: E/AndroidRuntime(1025): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 03-26 20:34:13.832: E/AndroidRuntime(1025): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 03-26 20:34:13.832: E/AndroidRuntime(1025): ... 11 more 

Таким образом, очевидно, что сетевое подключение по проблеме основного потока означает, что мне нужно переместить это в Asynctask, не так ли? Но с таким количеством ошибок, мне интересно, не хватает ли я чего-то другого, это очевидно? В конечном итоге я хочу иметь возможность регистрировать пользователя / пароли в базе данных, затем получать запросы и отправлять ответы, так что это просто разминка в основном. Если вы переходите http://www.davidjkelley.net/city.php, вы можете видеть, что база данных действительно правильно отвечает на PHP-файл запроса, который я связал внутри кода Android, так что это не проблема.

Изменить ~ Я должен отметить, что моя активность ранее расширила список Activity, следуя этому руководству: http://blog.sptechnolab.com/2011/02/10/android/android-connecting-to-mysql-using-php/, поэтому мой XML – это просто ListView на данный момент, потому что это помогло прояснить ошибку, в которой говорилось, что мне нужен компонент ListView с идентификатором «list».

Изменить ~ Мой PHP-код:

 <?php mysql_connect("127.0.0.1","***","***"); mysql_select_db("***"); $sql=mysql_query("select * from CITY where CITY_NAME like 'A%'"); while($row=mysql_fetch_assoc($sql)) $output[]=$row; print(json_encode($output)); mysql_close(); ?> в <?php mysql_connect("127.0.0.1","***","***"); mysql_select_db("***"); $sql=mysql_query("select * from CITY where CITY_NAME like 'A%'"); while($row=mysql_fetch_assoc($sql)) $output[]=$row; print(json_encode($output)); mysql_close(); ?> 

Очевидно, что множество звезд – это правильная информация, так как, когда вы посетили ссылку, опубликованную выше, SQL-считывание отображается правильно.

Как работает ваша база данных? Публикация того, как соединяются PHP, может быть более актуальной. Очень возможно, что в PHP вы не подключаете запрос из приложения к фактической базе данных (либо с неправильным URL-адресом, либо с именем самой базы данных). Ознакомьтесь с этим уроком. Я могу подтвердить, что он работает нормально, и, похоже, он выполняет необходимую функциональность. В этом учебнике есть заметки о том, где можно изменить код, чтобы вы могли запускать его на своем размещенном сервере вместо localhost.