没有错误,但ListView没有显示

时间:2013-06-20 22:23:44

标签: android android-listview

为什么我的listView没有出现..我的编码出了什么问题? listView据说显示了我数据库中的数据..这是我的编码......它没有显示任何错误。所以我不知道错误在哪里。

Faculty.java

package com.example.prototype;

import android.app.Activity;
import android.app.SearchManager;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.ListView;

public class Faculty extends Activity {

    // Search EditText
    EditText inputSearch;
    // List view
    private ListView myListView;
    private DatabaseAdapter DbAdapter;


   /* // Listview Adapter
    ArrayAdapter<String> adapter;    
    // ArrayList for Listview
    ArrayList<HashMap<String, String>> productList;
    protected SQLiteDatabase db;*/


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.qs_faculty);

        inputSearch = (EditText) findViewById(R.id.inputSearch);
        myListView = (ListView) findViewById(R.id.list_view);

        handleIntent(getIntent());
        DbAdapter = new DatabaseAdapter(this);
        DbAdapter.open();

      //Clean all Customers
        DbAdapter.deleteAllCustomers();
        //Add some Customer data as a sample
        DbAdapter.createLocation("PIZZA1", "Pizza Hut", "1107 West Adams Boulevard", "", "Los Angeles", "CA", "90007", null, null);
        DbAdapter.createLocation("PIZZA2", "Pizza Hut", "1562 West Pico Boulevard", "", "Los Angeles", "CA", "90015", null, null);
        DbAdapter.createLocation("PIZZA3", "Pizza Hut", "718 South Los Angeles Street", "", "Los Angeles", "CA", "90014", null, null);
        DbAdapter.createLocation("PIZZA4", "Pizza Hut", "2542 West Temple Street", "", "Los Angeles", "CA", "90026", null, null);
        DbAdapter.createLocation("PIZZA5", "Pizza Hut", "4329 North Figueroa Street", "", "Los Angeles", "CA", "90065", null, null);
        DbAdapter.createLocation("PIZZA6", "Pizza Hut", "4351 South Central Avenue", "", "Los Angeles", "CA", "90011", null, null);
        DbAdapter.createLocation("SUB1", "Subway", "975 West Jefferson", "", "Los Angeles", "CA", "90007", null, null);
        DbAdapter.createLocation("SUB2", "Subway", "2805 South Figueroa Street", "", "Los Angeles", "CA", "90007", null, null);
        DbAdapter.createLocation("SUB3", "Subway", "198 South Vermont Avenue", "", "Los Angeles", "CA", "90004", null, null);
        DbAdapter.createLocation("SUB4", "Subway", "504 West Olympic Boulevard", "", "Los Angeles", "CA", "90015", null, null);

         }    

    @Override
    protected void onNewIntent(Intent intent) {
        // Because this activity has set launchMode="singleTop", the system calls this method
        // to deliver the intent if this activity is currently the foreground activity when
        // invoked again (when the user executes a search from this activity, we don't create
        // a new instance of this activity, so the system delivers the search intent here)
        handleIntent(intent);
    }

    private void handleIntent(Intent intent) {
        if (Intent.ACTION_VIEW.equals(intent.getAction())) {
            // handles a click on a search suggestion; launches activity to show word
            Intent wordIntent = new Intent(this, FacultyDetail.class);
            wordIntent.setData(intent.getData());
            startActivity(wordIntent);
        } else if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
            // handles a search query
            String query = intent.getStringExtra(SearchManager.QUERY);
            showResults(query);
        }
    }
        private void showResults(String query) {

            Cursor cursor = DbAdapter.searchCustomer((query != null ? query.toString() : "@@@@"));

            if (cursor == null) {
                // There are no results
                inputSearch.setText(getString(R.string.no_results, new Object[] {query}));
            } else {
                // Display the number of results
                int count = cursor.getCount();
                String countString = getResources().getQuantityString(R.plurals.search_results,
                                        count, new Object[] {count, query});
                inputSearch.setText(countString);

                // Specify the columns we want to display in the result
                String[] from = new String[] { DatabaseAdapter.KEY_NAME,
                                               DatabaseAdapter.KEY_ALAMAT,
                                               DatabaseAdapter.KEY_NOTEL,
                                               DatabaseAdapter.KEY_FAX,
                                               DatabaseAdapter.KEY_EMAIL,
                                               DatabaseAdapter.KEY_TRANSPORT,
                                               DatabaseAdapter.KEY_LANDMARK,
                                               DatabaseAdapter.KEY_WEBSITE};

                // Specify the corresponding layout elements where we want the columns to go
                int[] to = new int[] { R.id.faculty_name,
                                        R.id.faculty_alamat,
                                        R.id. faculty_notel,
                                        R.id. faculty_fax,
                                        R.id. faculty_email,
                                        R.id. faculty_transport,
                                        R.id. faculty_landmark,
                                        R.id. faculty_website};

                // Create a simple cursor adapter for the definitions and apply them to the ListView
                SimpleCursorAdapter words = new SimpleCursorAdapter(this,
                                              R.layout.qs_faculty_detail, cursor, from, to);
                myListView.setAdapter(words);

             // Define the on-click listener for the list items
                myListView.setOnItemClickListener(new OnItemClickListener() {

                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        // Get the cursor, positioned to the corresponding row in the result set
                        Cursor cursor = (Cursor) myListView.getItemAtPosition(position);
                        // Build the Intent used to open WordActivity with a specific word Uri
                        Intent wordIntent = new Intent(getApplicationContext(), FacultyDetail.class);
                        wordIntent.putExtra("KEY_ROWID", cursor.getInt(cursor.getColumnIndex("_id")));
                      /*  Uri data = Uri.withAppendedPath(DictionaryProvider.CONTENT_URI,String.valueOf(id));
                        wordIntent.setData(data);*/
                        startActivity(wordIntent);
                    }
                });
            }
        }
  }

FacultyDetail.java

package com.example.prototype;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.view.Menu;
import android.widget.TextView;

public class FacultyDetail extends Activity {

        private TextView name;
        private TextView alamat;
        private TextView notel;
        private TextView fax;
        private TextView email;
        private TextView transport;
        private TextView landmark;
        private TextView website;
        private int placeId;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.qs_faculty_detail);


        /*placeId = getIntent().getIntExtra("KEY_ROWID", 0);
        SQLiteDatabase db = (new DatabaseHelper(this)).getWritableDatabase();
        Cursor cursor = db.rawQuery("SELECT emp._id, emp.firstName, emp.lastName, emp.title, emp.officePhone, emp.cellPhone, emp.email, emp.managerId, mgr.firstName managerFirstName, mgr.lastName managerLastName FROM employee emp LEFT OUTER JOIN employee mgr ON emp.managerId = mgr._id WHERE emp._id = ?", 
                new String[]{""+ placeId});*/

        Uri uri = getIntent().getData();
        Cursor cursor = managedQuery(uri, null, null, null, null);

        if (cursor.getCount() == 1)
        {
            cursor.moveToFirst();

            name = (TextView) findViewById(R.id.faculty_name);
            name.setText(cursor.getString(cursor.getColumnIndex("Name")));

            alamat = (TextView) findViewById(R.id.faculty_alamat);
            alamat.setText(cursor.getString(cursor.getColumnIndex("title")));

            notel = (TextView) findViewById(R.id.faculty_notel);
            notel.setText(cursor.getString(cursor.getColumnIndex("No_tel")));

            fax = (TextView) findViewById(R.id.faculty_fax);
            fax.setText(cursor.getString(cursor.getColumnIndex("Fax")));

            email = (TextView) findViewById(R.id.faculty_email);
            email.setText(cursor.getString(cursor.getColumnIndex("Email")));

            transport = (TextView) findViewById(R.id.faculty_transport);
            transport.setText(cursor.getString(cursor.getColumnIndex("Transport")));

            landmark = (TextView) findViewById(R.id.faculty_landmark);
            landmark.setText(cursor.getString(cursor.getColumnIndex("Landmark")));

            website = (TextView) findViewById(R.id.faculty_website);
            website.setText(cursor.getString(cursor.getColumnIndex("Website")));

        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.faculty_detail, menu);
        return true;
    }

}

DatabaseAdapter.java

package com.example.prototype;

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

public class DatabaseAdapter {

    public static final String KEY_ROWID = "_id";
    public static final String KEY_NAME = "Name";
    public static final String KEY_ALAMAT = "Alamat";
    public static final String KEY_NOTEL = "No_tel";
    public static final String KEY_FAX = "Fax";
    public static final String KEY_EMAIL = "Email";
    public static final String KEY_TRANSPORT = "Transport";
    public static final String KEY_LANDMARK = "Landmark";
    public static final String KEY_WEBSITE = "Website";
    public static final String KEY_CATEGORY = "Category";

    private static final String TAG = "DatabaseAdapter";
    private DatabaseHelper mDbHelper;
    private SQLiteDatabase mDb;

    private static final String DATABASE_NAME = "AcademicLocation";
    private static final String FTS_VIRTUAL_TABLE = "UKM_Location";
    private static final int DATABASE_VERSION = 1;

    //Create a FTS3 Virtual Table for fast searches
    private static final String DATABASE_CREATE =
        "CREATE VIRTUAL TABLE " + FTS_VIRTUAL_TABLE + " USING fts3(" +
        KEY_NAME + "," +
        KEY_ALAMAT + "," +
        KEY_NOTEL + "," +
        KEY_FAX + "," +
        KEY_EMAIL + "," +
        KEY_TRANSPORT + "," +
        KEY_LANDMARK + "," +
        KEY_WEBSITE + "," +
        KEY_CATEGORY + "," +
        " UNIQUE (" + KEY_NAME + "));";


    private final Context mCtx;

    private static class DatabaseHelper extends SQLiteOpenHelper {

        DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }


        @Override
        public void onCreate(SQLiteDatabase db) {
            Log.w(TAG, DATABASE_CREATE);
            db.execSQL(DATABASE_CREATE);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                    + newVersion + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS " + FTS_VIRTUAL_TABLE);
            onCreate(db);
        }
    }

    public DatabaseAdapter(Context ctx) {
        this.mCtx = ctx;
    }

    public DatabaseAdapter open() throws SQLException {
        mDbHelper = new DatabaseHelper(mCtx);
        mDb = mDbHelper.getWritableDatabase();
        return this;
    }

    public void close() {
        if (mDbHelper != null) {
            mDbHelper.close();
        }
    }


    public long createLocation(String name, String alamat, String notel, String fax, String email, String transport, String landmark, String website, String category) {

        ContentValues initialValues = new ContentValues();
        String searchValue =     name + " " + 
                                alamat + " " + 
                                notel + " " + 
                                fax + " " + 
                                email + " " + 
                                transport+ " " + 
                                landmark+ " " + 
                                website+ " " + 
                                category;
        initialValues.put(KEY_NAME, name);
        initialValues.put(KEY_ALAMAT, alamat);
        initialValues.put(KEY_NOTEL, notel);
        initialValues.put(KEY_FAX, fax);
        initialValues.put(KEY_EMAIL, email);
        initialValues.put(KEY_TRANSPORT, transport);
        initialValues.put(KEY_LANDMARK, landmark);
        initialValues.put(KEY_WEBSITE, website);
        initialValues.put(KEY_CATEGORY, category);

        return mDb.insert(FTS_VIRTUAL_TABLE, null, initialValues);
    }


    public Cursor searchCustomer(String inputText) throws SQLException {
        Log.w(TAG, inputText);
        String query = "SELECT docid as _id," + KEY_NAME + "," + "," +
         " from " + FTS_VIRTUAL_TABLE +
        " where " +  KEY_NAME + " MATCH '" + inputText + "';";
        Log.w(TAG, query);
        Cursor mCursor = mDb.rawQuery(query,null);

        if (mCursor != null) {
            mCursor.moveToFirst();
        }
        return mCursor;

    }


    public boolean deleteAllCustomers() {

        int doneDelete = 0;
        doneDelete = mDb.delete(FTS_VIRTUAL_TABLE, null , null);
        Log.w(TAG, Integer.toString(doneDelete));
        return doneDelete > 0;

    }

}

请帮我解决这个问题..

1 个答案:

答案 0 :(得分:0)

你确定传入的查询有一些结果吗?

String query = intent.getStringExtra(SearchManager.QUERY);
showResults(query);

而不是:

if (cursor == null) {
   // There are no results
   inputSearch.setText(getString(R.string.no_results, new Object[] {query}));
}

尝试:

if (cursor == null || !cursor.moveToFirst()) {
   // There are no results
   inputSearch.setText(getString(R.string.no_results, new Object[] {query}));
}