Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Nie można pobrać danych z bazy danych mysql do ListView w mojej aplikacji na Androida

Dzieje się tutaj kilka rzeczy, spróbuję zająć się tym, co mogę.

Ten wpis dziennika jest podejrzany:

03-22 22:30:42.860: E/ERROR(6055): Illegal character in query at index 53: http://necrecords.16mb.com/getproducts.php?password=A AA E EEE

Również z tego dziennika:

03-22 22:54:08.000: E/ERROR(7654): Error converting result java.lang.NullPointerException: lock == null

Możesz zobaczyć, że nie otrzymujesz prawidłowej odpowiedzi z tej strony PHP.

Ten blok kodu zgłasza wyjątek:

//convert response to string
   try{
        BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"),8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
              sb.append(line + "\n");
        }
        is.close();         
        result=sb.toString();
   }catch(Exception e){
        Log.e("ERROR", "Error converting result "+e.toString());

Właśnie wypróbowałem adres URL w przeglądarce i zadziałało, ponieważ przeglądarka automatycznie poprawnie koduje adres URL, w następujący sposób:

http://necrecords.16mb.com/getproducts.php?password=A%20AA%20E%20EEE

Myślę, że wystarczy poprawnie zakodować adres URL, ponieważ ciąg zawiera spacje.

String query = URLEncoder.encode(mname, "utf-8");

httppost= new HttpPost("http://necrecords.16mb.com/getsongslist.php?password="+query);
response=httpclient.execute(httppost);     

Jeśli chodzi o problem podwajania się listy, możesz po prostu wyczyścić listę za każdym razem, gdy wykonuje się zadanie AsyncTask:

protected Void doInBackground(Void...params){ 

   InputStream is=null;
   String result="";
   try{

   records.clear(); //clear the list before re-populating

   httpclient=new DefaultHttpClient();
      httppost= new HttpPost("http://necrecords.16mb.com/getproducts.php");
   response=httpclient.execute(httppost);         
         HttpEntity entity = response.getEntity();
         is = entity.getContent();

   }catch(Exception e){

Jeszcze jedna rzecz, o której warto wspomnieć, prawdopodobnie będziesz chciał stworzyć oddzielny adapter dla każdego działania. Tak jak teraz, używasz tego samego adaptera dla obu działań.

W getView() adaptera , odwołujesz się do R.id.pro_name i R.id.pro_uprice , ale używasz tego adaptera w obu swoich działaniach. Czy oba Twoje działania zawierają te elementy w swoim układzie xml?

    public View getView(int position, View convertView, ViewGroup parent) {

     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     View itemView = inflater.inflate(groupid, parent, false);
     String[] row_items=records.get(position).split("__");
     TextView textName= (TextView) itemView.findViewById(R.id.pro_name);
     textName.setText(row_items[0]);
     TextView textPrice= (TextView) itemView.findViewById(R.id.pro_uprice);
     textPrice.setText(row_items[1]+"$");
     return itemView;
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. WYBIERZ wiersz według DATEPART()

  2. Przekaż tablicę do procedury przechowywanej w MySQL

  3. Dołączenie Mysql i suma podwajają wynik

  4. Błąd MySQL podczas tworzenia klucza obcego z migracją Laravel

  5. Dane wyjściowe bazy danych PHP nie pokazują prawidłowego sposobu