sql >> Database teknologi >  >> RDS >> Mysql

Kan ikke hente data fra mysql-databasen til ListView i min Android-applikation

Der sker et par ting her, jeg vil prøve at tage fat på, hvad jeg kan.

Denne logpost er mistænkelig:

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

Også fra denne log:

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

Du kan se, at du ikke får et gyldigt svar fra denne PHP-side.

Denne kodeblok afgiver en undtagelse:

//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());

Jeg har lige prøvet URL'en i en browser, og det virkede, da browseren automatisk koder URL'en korrekt, sådan her:

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

Jeg tror, ​​at du bare skal kode URL'en korrekt, da strengen indeholder mellemrum.

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

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

Hvad angår problemet med, at din liste bliver fordoblet, kan du bare rydde listen, hver gang AsyncTask udføres:

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){

En ting mere at nævne, du vil sikkert gerne oprette en separat adapter for hver aktivitet. Som det er nu, bruger du den samme adapter til begge aktiviteter.

I din adapters getView() , refererer du til R.id.pro_name og R.id.pro_uprice , men du bruger denne adapter i begge dine aktiviteter. Indeholder begge dine aktiviteter disse elementer i deres layout 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. MySQL JDBC Driver 5.1.33 - Tidszoneproblem

  2. Implementering af et certifikat til krypteret forbindelse SQL Server

  3. Erstat en streng med en anden streng i SQL Server (T-SQL)

  4. Sådan rettes "EXECUTE-sætningen mislykkedes, fordi dens WITH RESULT SETS-klausul specificerede 1 resultatsæt(er)..." i SQL Server