无法在android的搜索视图中检索数据

无法在android的搜索视图中检索数据,android,sqlite,Android,Sqlite,我正在尝试从SQLite数据库到SearchView进行简单的数据检索 我的问题是,SearchView没有针对存储在数据库中的数据进行填充,尽管它始终显示 已成功创建数据库 下面是代码 fragment\u search.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

我正在尝试从SQLite数据库到
SearchView
进行简单的数据检索

我的问题是,SearchView没有针对存储在数据库中的数据进行填充,尽管它始终显示

已成功创建数据库

下面是代码

fragment\u search.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#E6E6E6"
        android:orientation="vertical" >

        <View
            android:id="@+id/view1"
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:layout_alignParentTop="true"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:layout_marginTop="5dp"
            android:background="#FFFFFF" />

        <SearchView
            android:id="@+id/searchView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="3dp" >
        </SearchView>

        <ListView
            android:id="@+id/listview_search"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/searchView"
            android:layout_centerHorizontal="true"
            android:divider="#E6E6E6"
            android:dividerHeight="5dp" />

        <LinearLayout
            android:id="@+id/rightLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/view1"
            android:layout_alignTop="@+id/view1"
            android:orientation="vertical"
            android:paddingTop="25dp" >

            </LinearLayout>

    </RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:id="@+id/hotelLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <TableRow
            android:id="@+id/section_search"
            android:layout_width="wrap_content"
            android:layout_height="match_parent" >

            <GridLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:columnCount="2" >

                <ImageView
                    android:id="@+id/hotel_image"
                    android:layout_width="100dp"
                    android:layout_height="100dp"
                    android:layout_gravity="left"
                    android:src="@drawable/aaa" />

                <EditText
                    android:id="@+id/hotel_name"
                    android:layout_width="209dp"
                    android:layout_height="56dp"
                    android:layout_gravity="fill_horizontal" >

                    <requestFocus />
                </EditText>

                <EditText
                    android:id="@+id/hotel_city"
                    android:layout_width="96dp"
                    android:layout_column="1"
                    android:layout_gravity="left|bottom"
                    android:layout_row="0"
                    android:ems="10" />

                <EditText
                    android:id="@+id/hotel_country"
                    android:layout_width="106dp"
                    android:layout_column="1"
                    android:layout_gravity="right|bottom"
                    android:layout_row="0"
                    android:ems="10" />

            </GridLayout>

        </TableRow>

    </LinearLayout>

</RelativeLayout>
DataBaseHandler.java

    package com.mytry.test;

    import android.provider.BaseColumns;

    public class TableData 
    {
        public TableData()
        {

        }

        public static abstract class TableInfo implements BaseColumns
        {
            public static final String DATABASE_NAME = "tourDguide";
            public static final String TABLE_NAME = "Hotels";
            public static final String HOTEL_ID = "id";
            public static final String HOTEL_NAME = "hotel_name";
            public static final String HOTEL_ADDRESS = "hotel_address";
            public static final String HOTEL_CITY = "hotel_city";
            public static final String HOTEL_COUNTRY = "hotel_country";
            public static final String HOTEL_POSTAL = "postal_code";

        }

    }
    package com.mytry.test;

    import android.content.Context;
    import android.database.Cursor;
    import android.database.SQLException;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.util.Log;


    import com.mytry.test.TableData.TableInfo;

    public class DataHandler 
    {

        public static final int DATABASE_VERSION = 1;


        SQLiteDatabase db;
        DataBaseHelper dbhelper;
        Context ctx;

        private static class DataBaseHelper extends SQLiteOpenHelper
        {
            public String CREATE_QUERY = "CREATE TABLE "+TableInfo.TABLE_NAME+"("+TableInfo.HOTEL_ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"+TableInfo.HOTEL_NAME+" VARCHAR,"+TableInfo.HOTEL_ADDRESS+" VARCHAR,"+TableInfo.HOTEL_CITY+" VARCHAR,"+TableInfo.HOTEL_COUNTRY+" VARCHAR,"+TableInfo.HOTEL_POSTAL+" INT );";

            public DataBaseHelper(Context ctx) {
                super(ctx,TableInfo.DATABASE_NAME, null, DATABASE_VERSION);
                Log.d("Database Operations", "Successfully Created Database");
                // TODO Auto-generated constructor stub
            }

            @Override
            public void onCreate(SQLiteDatabase db) {
                // TODO Auto-generated method stub
                try{
                db.execSQL(CREATE_QUERY);
                Log.d("Database Operations", "Successfully Created Table");
                }
                catch(SQLException e)
                {
                    e.printStackTrace();
                }
            }

            @Override
            public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

                db.execSQL("Drop table if exists "+TableInfo.TABLE_NAME);
                onCreate(db);


            }

        }

        public DataHandler(Context ctx) {
            this.ctx = ctx;
            dbhelper = new DataBaseHelper(ctx);
            // TODO Auto-generated constructor stub
        }

        public DataHandler open()
        {
            dbhelper = new DataBaseHelper(ctx);
            db = dbhelper.getReadableDatabase();
            return this;

        }

        public void close()
        {
            dbhelper.close();
        }

        public Cursor searchHotels(String inputText) throws SQLException
        {

            String query = "Select "+TableInfo.HOTEL_ID+" as _id,"+TableInfo.HOTEL_NAME+","+TableInfo.HOTEL_ADDRESS+","+TableInfo.HOTEL_CITY+","+TableInfo.HOTEL_COUNTRY+","+TableInfo.HOTEL_POSTAL+" from "+TableInfo.TABLE_NAME+" where "+TableInfo.HOTEL_NAME+" LIKE '" + inputText + "';";
            Log.d("table operations","Successfully transferred query");
            Cursor cr = db.rawQuery(query, null);

            if(cr!=null)
            {
                cr.moveToFirst();
            }

            return cr;

        }
    }
    package com.mytry.test;

    import com.mytry.test.TableData.TableInfo;

    import android.R.anim;
    import android.app.Activity;
    import android.app.DownloadManager.Query;
    import android.content.Context;
    import android.database.Cursor;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.EditText;
    import android.widget.LinearLayout;
    import android.widget.ListView;
    import android.widget.SearchView;
    import android.widget.SimpleAdapter;
    import android.widget.SimpleCursorAdapter;
    import android.widget.TextView;
    import android.widget.AdapterView.OnItemClickListener;

    public class SearchViewActivity extends Activity implements SearchView.OnQueryTextListener,SearchView.OnCloseListener
    {
        private ListView list;
        private SearchView search;
        private DataHandler dbHandler;
        private TextView name,city,country;
        private EditText edit;
        Context ctx=this;

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.fragment_search);

            search = (SearchView) this.findViewById(R.id.searchView);

            list = (ListView) this.findViewById(R.id.listview_search);

            name = (TextView)this.findViewById(R.id.hotel_name);
            city = (TextView)this.findViewById(R.id.hotel_city);
            country = (TextView)this.findViewById(R.id.hotel_country);

            search.setIconifiedByDefault(false);

            search.setOnQueryTextListener(this);
            search.setOnCloseListener(this);

            dbHandler = new DataHandler(getBaseContext());
            dbHandler.open();


        }

        public boolean onQueryTextSubmit(String query) 
        {
            showResults(query + "*");
            return false;
        }

        public boolean onQueryTextChange(String newText) 
        {
            showResults(newText + "*");
            return false;
        }

        public boolean onClose() 

        {
            showResults("");

            return false;
        }

        private void showResults(String query) 
        {

        Cursor cr = dbHandler.searchHotels((query!=null?query.toString(): "@@@@"));

        if(cr==null)
        {

        }
        else
        {
            String[] from = new String[]
            {TableInfo.HOTEL_NAME,TableInfo.HOTEL_ADDRESS,TableInfo.HOTEL_CITY,TableInfo.HOTEL_COUNTRY,TableInfo.HOTEL_POSTAL};

            int[] to = new int[]{R.id.hotel_name,R.id.hotel_city,R.id.hotel_country};

            SimpleCursorAdapter hotels = new SimpleCursorAdapter(this,R.layout.search_list, cr, from, to);      
            list.setAdapter(hotels);

             list.setOnItemClickListener(new OnItemClickListener() 
             {
                 public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
                 {
                    Cursor cr = (Cursor)list.getItemAtPosition(position);

                    String hotel_name = cr.getString(cr.getColumnIndexOrThrow("hotel_name"));
                    String hotel_city = cr.getString(cr.getColumnIndexOrThrow("hotel_city"));
                    String hotel_country = cr.getString(cr.getColumnIndexOrThrow("hotel_country"));

                    LinearLayout hotelLayout = (LinearLayout)findViewById(R.id.hotelLayout);

                    if(hotelLayout == null){
                        //Inflate the Customer Information View 
                        LinearLayout leftLayout = (LinearLayout)findViewById(R.id.rightLayout);
                        View hotelInfo = getLayoutInflater().inflate(R.layout.search_list, leftLayout, false);
                        leftLayout.addView(hotelInfo);
                    }

                    name.setText(hotel_name);
                    city.setText(hotel_city);
                    country.setText(hotel_country);

                    search.setQuery("", true);

                }
            });

        }
        }
    }
SeachViewActivity.java

    package com.mytry.test;

    import android.provider.BaseColumns;

    public class TableData 
    {
        public TableData()
        {

        }

        public static abstract class TableInfo implements BaseColumns
        {
            public static final String DATABASE_NAME = "tourDguide";
            public static final String TABLE_NAME = "Hotels";
            public static final String HOTEL_ID = "id";
            public static final String HOTEL_NAME = "hotel_name";
            public static final String HOTEL_ADDRESS = "hotel_address";
            public static final String HOTEL_CITY = "hotel_city";
            public static final String HOTEL_COUNTRY = "hotel_country";
            public static final String HOTEL_POSTAL = "postal_code";

        }

    }
    package com.mytry.test;

    import android.content.Context;
    import android.database.Cursor;
    import android.database.SQLException;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.util.Log;


    import com.mytry.test.TableData.TableInfo;

    public class DataHandler 
    {

        public static final int DATABASE_VERSION = 1;


        SQLiteDatabase db;
        DataBaseHelper dbhelper;
        Context ctx;

        private static class DataBaseHelper extends SQLiteOpenHelper
        {
            public String CREATE_QUERY = "CREATE TABLE "+TableInfo.TABLE_NAME+"("+TableInfo.HOTEL_ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"+TableInfo.HOTEL_NAME+" VARCHAR,"+TableInfo.HOTEL_ADDRESS+" VARCHAR,"+TableInfo.HOTEL_CITY+" VARCHAR,"+TableInfo.HOTEL_COUNTRY+" VARCHAR,"+TableInfo.HOTEL_POSTAL+" INT );";

            public DataBaseHelper(Context ctx) {
                super(ctx,TableInfo.DATABASE_NAME, null, DATABASE_VERSION);
                Log.d("Database Operations", "Successfully Created Database");
                // TODO Auto-generated constructor stub
            }

            @Override
            public void onCreate(SQLiteDatabase db) {
                // TODO Auto-generated method stub
                try{
                db.execSQL(CREATE_QUERY);
                Log.d("Database Operations", "Successfully Created Table");
                }
                catch(SQLException e)
                {
                    e.printStackTrace();
                }
            }

            @Override
            public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

                db.execSQL("Drop table if exists "+TableInfo.TABLE_NAME);
                onCreate(db);


            }

        }

        public DataHandler(Context ctx) {
            this.ctx = ctx;
            dbhelper = new DataBaseHelper(ctx);
            // TODO Auto-generated constructor stub
        }

        public DataHandler open()
        {
            dbhelper = new DataBaseHelper(ctx);
            db = dbhelper.getReadableDatabase();
            return this;

        }

        public void close()
        {
            dbhelper.close();
        }

        public Cursor searchHotels(String inputText) throws SQLException
        {

            String query = "Select "+TableInfo.HOTEL_ID+" as _id,"+TableInfo.HOTEL_NAME+","+TableInfo.HOTEL_ADDRESS+","+TableInfo.HOTEL_CITY+","+TableInfo.HOTEL_COUNTRY+","+TableInfo.HOTEL_POSTAL+" from "+TableInfo.TABLE_NAME+" where "+TableInfo.HOTEL_NAME+" LIKE '" + inputText + "';";
            Log.d("table operations","Successfully transferred query");
            Cursor cr = db.rawQuery(query, null);

            if(cr!=null)
            {
                cr.moveToFirst();
            }

            return cr;

        }
    }
    package com.mytry.test;

    import com.mytry.test.TableData.TableInfo;

    import android.R.anim;
    import android.app.Activity;
    import android.app.DownloadManager.Query;
    import android.content.Context;
    import android.database.Cursor;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.EditText;
    import android.widget.LinearLayout;
    import android.widget.ListView;
    import android.widget.SearchView;
    import android.widget.SimpleAdapter;
    import android.widget.SimpleCursorAdapter;
    import android.widget.TextView;
    import android.widget.AdapterView.OnItemClickListener;

    public class SearchViewActivity extends Activity implements SearchView.OnQueryTextListener,SearchView.OnCloseListener
    {
        private ListView list;
        private SearchView search;
        private DataHandler dbHandler;
        private TextView name,city,country;
        private EditText edit;
        Context ctx=this;

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.fragment_search);

            search = (SearchView) this.findViewById(R.id.searchView);

            list = (ListView) this.findViewById(R.id.listview_search);

            name = (TextView)this.findViewById(R.id.hotel_name);
            city = (TextView)this.findViewById(R.id.hotel_city);
            country = (TextView)this.findViewById(R.id.hotel_country);

            search.setIconifiedByDefault(false);

            search.setOnQueryTextListener(this);
            search.setOnCloseListener(this);

            dbHandler = new DataHandler(getBaseContext());
            dbHandler.open();


        }

        public boolean onQueryTextSubmit(String query) 
        {
            showResults(query + "*");
            return false;
        }

        public boolean onQueryTextChange(String newText) 
        {
            showResults(newText + "*");
            return false;
        }

        public boolean onClose() 

        {
            showResults("");

            return false;
        }

        private void showResults(String query) 
        {

        Cursor cr = dbHandler.searchHotels((query!=null?query.toString(): "@@@@"));

        if(cr==null)
        {

        }
        else
        {
            String[] from = new String[]
            {TableInfo.HOTEL_NAME,TableInfo.HOTEL_ADDRESS,TableInfo.HOTEL_CITY,TableInfo.HOTEL_COUNTRY,TableInfo.HOTEL_POSTAL};

            int[] to = new int[]{R.id.hotel_name,R.id.hotel_city,R.id.hotel_country};

            SimpleCursorAdapter hotels = new SimpleCursorAdapter(this,R.layout.search_list, cr, from, to);      
            list.setAdapter(hotels);

             list.setOnItemClickListener(new OnItemClickListener() 
             {
                 public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
                 {
                    Cursor cr = (Cursor)list.getItemAtPosition(position);

                    String hotel_name = cr.getString(cr.getColumnIndexOrThrow("hotel_name"));
                    String hotel_city = cr.getString(cr.getColumnIndexOrThrow("hotel_city"));
                    String hotel_country = cr.getString(cr.getColumnIndexOrThrow("hotel_country"));

                    LinearLayout hotelLayout = (LinearLayout)findViewById(R.id.hotelLayout);

                    if(hotelLayout == null){
                        //Inflate the Customer Information View 
                        LinearLayout leftLayout = (LinearLayout)findViewById(R.id.rightLayout);
                        View hotelInfo = getLayoutInflater().inflate(R.layout.search_list, leftLayout, false);
                        leftLayout.addView(hotelInfo);
                    }

                    name.setText(hotel_name);
                    city.setText(hotel_city);
                    country.setText(hotel_country);

                    search.setQuery("", true);

                }
            });

        }
        }
    }
package com.mytry.test;
导入com.mytry.test.TableData.TableInfo;
导入android.R.anim;
导入android.app.Activity;
导入android.app.DownloadManager.Query;
导入android.content.Context;
导入android.database.Cursor;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.EditText;
导入android.widget.LinearLayout;
导入android.widget.ListView;
导入android.widget.SearchView;
导入android.widget.simpledapter;
导入android.widget.SimpleCursorAdapter;
导入android.widget.TextView;
导入android.widget.AdapterView.OnItemClickListener;
公共类SearchViewActivity扩展活动实现SearchView.OnQueryTextListener、SearchView.OnCloseListener
{
私有列表视图列表;
私有搜索视图搜索;
私有数据处理程序dbHandler;
私有文本视图名称、城市、国家;
私人编辑文本编辑;
上下文ctx=此;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_search);
search=(SearchView)this.findviewbyd(R.id.SearchView);
list=(ListView)this.findViewById(R.id.ListView\u search);
name=(TextView)this.findviewbyd(R.id.hotel\u name);
城市=(TextView)this.findviewbyd(R.id.hotel\u city);
country=(TextView)this.findviewbyd(R.id.hotel\u country);
search.setIconifiedByDefault(false);
search.setOnQueryTextListener(这个);
search.setOnCloseListener(this);
dbHandler=newdatahandler(getBaseContext());
dbHandler.open();
}
公共布尔值onQueryTextSubmit(字符串查询)
{
显示结果(查询+“*”);
返回false;
}
公共布尔onQueryTextChange(字符串newText)
{
显示结果(新文本+“*”);
返回false;
}
公共布尔onClose()
{
展示结果(“”);
返回false;
}
私有void显示结果(字符串查询)
{
游标cr=dbHandler.searchHotels((query!=null?query.toString():“@@@”);
if(cr==null)
{
}
其他的
{
String[]from=新字符串[]
{TableInfo.HOTEL\u NAME,TableInfo.HOTEL\u ADDRESS,TableInfo.HOTEL\u CITY,TableInfo.HOTEL\u COUNTRY,TableInfo.HOTEL\u POSTAL};
int[]to=新int[]{R.id.hotel\u name,R.id.hotel\u city,R.id.hotel\u country};
SimpleCursorAdapter hotels=新的SimpleCursorAdapter(this,R.layout.search_list,cr,from,to);
名单.酒店;;
list.setOnItemClickListener(新的OnItemClickListener()
{
public void onItemClick(AdapterView父对象、视图、整型位置、长id)
{
游标cr=(游标)列表。getItemAtPosition(位置);
String hotel_name=cr.getString(cr.getColumnIndexOrThrow(“hotel_name”);
String hotel_city=cr.getString(cr.getColumnIndexOrThrow(“hotel_city”);
String hotel_country=cr.getString(cr.getColumnIndexOrThrow(“hotel_country”);
LinearLayout hotelLayout=(LinearLayout)findViewById(R.id.hotelLayout);
if(hotelLayout==null){
//膨胀客户信息视图
LinearLayout leftLayout=(LinearLayout)findViewById(R.id.rightLayout);
查看hotelInfo=GetLayoutFlater()。充气(R.layout.search_list,leftLayout,false);
leftLayout.addView(hotelInfo);
}
name.setText(酒店名称);
city.setText(城市酒店);
country.setText(国家酒店);
search.setQuery(“,true);
}
});
}
}
}

您的表中是否有数据?是的,有两条记录