sql >> データベース >  >> RDS >> Mysql

AndroidアプリケーションのmysqlデータベースからListViewにデータをフェッチできません

    ここで起こっていることがいくつかあります。私ができることを取り上げようと思います。

    このログエントリは疑わしいです:

    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
    

    また、このログから:

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

    このPHPページから有効な応答が得られていないことがわかります。

    このコードブロックは例外をスローしています:

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

    ブラウザでURLを試したところ、次のようにブラウザがURLを自動的に適切にエンコードするため、機能しました。

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

    文字列にはスペースが含まれているため、URLを適切にエンコードする必要があると思います。

    String query = URLEncoder.encode(mname, "utf-8");
    
    httppost= new HttpPost("http://necrecords.16mb.com/getsongslist.php?password="+query);
    response=httpclient.execute(httppost);     
    

    リストが2倍になる問題については、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){
    

    もう1つ言及しておきたいのは、Acitvityごとに個別のアダプターを作成することです。現在のように、両方のアクティビティに同じアダプタを使用しています。

    アダプタのgetView()R.id.pro_nameを参照します およびR.id.pro_uprice 、ただし、両方のアクティビティでこのアダプタを使用しています。両方のアクティビティのレイアウト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. データベース接続は常に開いたままにする必要がありますか、それとも必要な場合にのみ開く必要がありますか?

    2. MySQLの文字エンコードの問題を解決する方法は?

    3. ローカルのFirebirdデータベースのレプリケーション/オンラインデータベースへの同期

    4. 複数のテーブルからのMYSQL左結合COUNTS