2016-05-31 8 views
1

AndroidアプリケーションでローカルSQLiteデータベースにアクセスして、鳥の名前のリストを取得してから、リストビューに表示します。 SQLiteAssetHelperを使用して、ローカルに格納されているデータベースにアクセスしています。アンドロイドAPI 10とAPI 23でSQLiteからデータを表示すると、結果が異なる


テスト中に、デバイスの違いによって結果が異なることがわかりました。

  • Samsung GT-I9001(Android 2.3.3、API 10)ではすべて が表示されます。すべてのデータが正しく

(スクリーンショットに表示例)

が表示されない 新しいAndroidのバージョン (サムスンE5823(アンドロイド6.0、API 23)とエミュレータネクサス5 API 23)を備えたデバイス上の
  • テスト

    Samsung E5823 not displaying full title

    Samsung GT-I9001 displaying everything correctly


    これはデータベースからデータを取得するコードです。

    public List<Specie> getNames() { 
        List<Specie> list = new ArrayList<>(); 
    
        Cursor cursor = database.rawQuery("SELECT * FROM " + TABLE_NAME + " ORDER BY LATIN ASC", null); 
        cursor.moveToFirst(); 
    
        while (!cursor.isAfterLast()) { 
    
         String nameLT = cursor.getString(1); // this sometimes displayed not correctly 
         String nameLOT = cursor.getString(2); //this is displayed corretly 
    
         list.add(new Specie(R.drawable.ic_bird, nameLT, nameLOT)); 
         cursor.moveToNext(); 
        } 
        cursor.close(); 
        return list; 
    } 
    

    これは、データがリストに入れている配列アダプターコードです。

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
        View row = convertView; 
        SpecieHolder holder = null; 
    
        if(row == null) 
        { 
         LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
         row = inflater.inflate(layoutResourceId, parent, false); 
         holder = new SpecieHolder(); 
         holder.imgIcon = (ImageView)row.findViewById(R.id.icon); 
         holder.txtTitle1 = (TextView)row.findViewById(R.id.firstLine); 
         holder.txtTitle2 = (TextView)row.findViewById(R.id.secondLine); 
         row.setTag(holder); 
        } 
        else 
        { 
         holder = (SpecieHolder)row.getTag(); 
        } 
        Specie specie = data.get(position); 
        holder.txtTitle1.setText(specie.titleLT); 
        holder.txtTitle2.setText(specie.titleLOT); 
        setImage(holder.imgIcon, specie.titleLOT); 
    
        return row; 
    } 
    static class SpecieHolder 
    { 
        ImageView imgIcon; 
        TextView txtTitle1; 
        TextView txtTitle2; 
    } 
    

    list_item.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal"> 
    
    <ImageView 
        android:id="@+id/icon" 
        android:layout_width="100dp" 
        android:layout_height="100dp" 
        android:layout_alignParentBottom="true" 
        android:layout_alignParentTop="true" 
        android:layout_marginTop="6dip" 
        android:layout_marginLeft="6dip" 
        android:layout_marginRight="6dip" 
        android:src="@mipmap/ic_launcher"/> 
    
    <LinearLayout 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:orientation="vertical" 
        android:layout_toRightOf="@id/icon" 
        android:paddingTop="15dp"> 
    
        <TextView 
         android:id="@+id/firstLine" 
         android:layout_width="wrap_content" 
         android:layout_height="fill_parent" 
         android:text="Example application" 
         android:textSize="20sp" /> 
        <TextView 
         android:id="@+id/secondLine" 
         android:layout_width="wrap_content" 
         android:layout_height="fill_parent" 
         android:text="Description" 
         android:textSize="12sp" /> 
    
    </LinearLayout> 
    

    何異なるデバイスとどのようにこの問題を解決できるとの違いを引き起こす可能性が?

    (私は問題のクリアランスのために必要なすべてのものを投稿していなかった場合は、必要に応じて申し訳ありませんが、私は追加します)

  • +0

    これは視覚的なバグかどうかを確認するためにフォントサイズを変更しようとしています(私はそれが当てはまりません)。また、私はあなたがそれらを設計している間、レイアウトのための異なる色を使用するためにデバッグ目的のためにお勧めします。したがって、問題がどこにあるかを観察します。 – XMight

    +0

    最初にオンラインでデータをデバッグすることをお勧めします。String nameLT = cursor.getString(1);これがDBの問題であるのか、正しくない視覚化であるのかを理解する。そしてチェックされた項目レイアウトXML(質問にそれを提供してください) – xAqweRx

    +0

    あなたはテーブル作成のSqlステートメントを投稿できますか?あなたのデータベースを抽出し、それを閲覧してデータが正しく保存されているかどうか確認できますか? – ThomasV

    答えて

    0

    どうやら問題は、データベースではなく、デザインではなかったです。

    list_item.xml内のテキストビューの幅は、fill_parentに設定されており、wrap_contentに変更し、問題を解決しました。

    +0

    まあ、ラップの内容と塗りつぶしの親は非常にトリッキーなことですが、あなたの経験では時々あなたは1つを使い、もう1つはもう1つ使います。同時に、ラップコンテンツは使用しないことをお勧めしますが、可能であればfill_parentを使用して親レイアウトを修正してください。そうしないとレイアウトはコンテンツに応じて変わります。また、コメントが役に立つ場合は、投票してください! – XMight

    関連する問題