有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在试图从数据库捕获值并在文本视图中显示时出错。安卓

我有一个sqllite数据库。我试图从数据库中获取值,并将其显示在文本视图中。我得到以下错误

这行有错误

TextView result = (TextView) findViewById(R.id.textviewres);

完整错误堆栈

02-10 21:24:53.986: E/AndroidRuntime(27992): FATAL EXCEPTION: main
02-10 21:24:53.986: E/AndroidRuntime(27992): java.lang.RuntimeException: Unable to start activity ComponentInfo{lk.adspace.jaffnatemples/lk.adspace.jaffnatemples.Db_results}: java.lang.ClassCastException: 安卓.widget.RelativeLayout cannot be cast to 安卓.widget.TextView
02-10 21:24:53.986: E/AndroidRuntime(27992):    at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2343)
02-10 21:24:53.986: E/AndroidRuntime(27992):    at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395)
02-10 21:24:53.986: E/AndroidRuntime(27992):    at 安卓.app.ActivityThread.access$600(ActivityThread.java:162)
02-10 21:24:53.986: E/AndroidRuntime(27992):    at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1364)
02-10 21:24:53.986: E/AndroidRuntime(27992):    at 安卓.os.Handler.dispatchMessage(Handler.java:107)
02-10 21:24:53.986: E/AndroidRuntime(27992):    at 安卓.os.Looper.loop(Looper.java:194)
02-10 21:24:53.986: E/AndroidRuntime(27992):    at 安卓.app.ActivityThread.main(ActivityThread.java:5371)
02-10 21:24:53.986: E/AndroidRuntime(27992):    at java.lang.reflect.Method.invokeNative(Native Method)
02-10 21:24:53.986: E/AndroidRuntime(27992):    at java.lang.reflect.Method.invoke(Method.java:525)
02-10 21:24:53.986: E/AndroidRuntime(27992):    at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
02-10 21:24:53.986: E/AndroidRuntime(27992):    at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:600)
02-10 21:24:53.986: E/AndroidRuntime(27992):    at dalvik.system.NativeStart.main(Native Method)
02-10 21:24:53.986: E/AndroidRuntime(27992): Caused by: java.lang.ClassCastException: 安卓.widget.RelativeLayout cannot be cast to 安卓.widget.TextView
02-10 21:24:53.986: E/AndroidRuntime(27992):    at lk.adspace.jaffnatemples.Db_results.onCreate(Db_results.java:52)
02-10 21:24:53.986: E/AndroidRuntime(27992):    at 安卓.app.Activity.performCreate(Activity.java:5122)
02-10 21:24:53.986: E/AndroidRuntime(27992):    at 安卓.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
02-10 21:24:53.986: E/AndroidRuntime(27992):    at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307)
02-10 21:24:53.986: E/AndroidRuntime(27992):    ... 11 more

DB处理程序类

    package lk.adspace.jaffnatemples;



    import java.util.ArrayList;


    import 安卓.content.ContentValues;
    import 安卓.content.Context;
    import 安卓.database.Cursor;
    import 安卓.database.sqlite.SQLiteDatabase;

    import 安卓.database.sqlite.SQLiteOpenHelper;
    import 安卓.util.Log;

    public class Dbhandler extends SQLiteOpenHelper  {


        private static final int DATABASE_VERSION = 1;

        // Database Name
        private static final String DATABASE_NAME = "jaffnatempletest";

        // Temple table name
        private static final String TABLE_TEMPLE = "templ";


        // Contacts Table Columns names
        private static final String KEY_ID = "id";
        private static final String KEY_TMPNAME = "temple_name";
        private static final String KEY_TMPTYPE = "temple_type";
        private static final String KEY_LATITUDE = "latitude";
        private static final String KEY_LONGITUDE = "longitude";
        private static final String KEY_IMGNAME = "image_name";
        private static final String KEY_YEARBUILD = "year_build";
        private static final String KEY_ADDRESS = "address";
        private static final String KEY_CITY = "city";
        private static final String KEY_EMAIL = "email";
        private static final String KEY_WEB = "website";
        private static final String KEY_TEL1 = "telephone1";
        private static final String KEY_TEL2 = "telephone2";
        private static final String KEY_DESCRI = "Description";
        private final ArrayList<kovil> temple_list = new ArrayList<kovil>();


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



        // Creating Tables
        @Override
        public void onCreate(SQLiteDatabase db) {
        String CREATE_TEMPLE_TABLE = "CREATE TABLE " + TABLE_TEMPLE + "("
            + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," + KEY_TMPNAME + " TEXT," + KEY_TMPTYPE + " TEXT," + KEY_LATITUDE + " TEXT," + KEY_LONGITUDE + " TEXT," + KEY_IMGNAME + " TEXT,"
            + KEY_YEARBUILD + " TEXT," + KEY_ADDRESS + " TEXT," + KEY_CITY + " TEXT," + KEY_EMAIL + " TEXT," + KEY_WEB + " TEXT," + KEY_TEL1 + " TEXT," + KEY_TEL2 + " TEXT,"
            + KEY_DESCRI + " TEXT" + ")";
        db.execSQL(CREATE_TEMPLE_TABLE);
        }


        // Upgrading database
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_TEMPLE);

        // Create tables again
        onCreate(db);
        }



        // Adding new temple
        public void Add_Temple(kovil Kovil) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();

        values.put(KEY_TMPNAME, Kovil.gettemplename()); 
        values.put(KEY_TMPTYPE, Kovil.gettempletype()); 
        values.put(KEY_LATITUDE, Kovil.getlatitude()); 
        values.put(KEY_LONGITUDE, Kovil.getlongitude()); 
        values.put(KEY_IMGNAME, Kovil.getimage_name()); 
        values.put(KEY_YEARBUILD, Kovil.getyear_build()); 
        values.put(KEY_ADDRESS, Kovil.getaddress()); 
        values.put(KEY_CITY, Kovil.getcity()); 
        values.put(KEY_EMAIL, Kovil.getemail()); 
        values.put(KEY_WEB, Kovil.getwebsite()); 
        values.put(KEY_TEL1, Kovil.gettelephone1()); 
        values.put(KEY_TEL2, Kovil.gettelephone2());
        values.put(KEY_DESCRI, Kovil.getDescription());

        // Inserting Row
        db.insert(TABLE_TEMPLE, null, values);
        db.close(); // Closing database connection
        }






        // Getting single contact
        kovil Get_Temple(int id) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(TABLE_TEMPLE, new String[] { KEY_ID,
                KEY_TMPNAME, KEY_TMPTYPE, KEY_LATITUDE, KEY_LONGITUDE, KEY_IMGNAME, KEY_YEARBUILD, KEY_ADDRESS, KEY_CITY, KEY_EMAIL, KEY_EMAIL, KEY_WEB, KEY_TEL1, KEY_TEL2, KEY_DESCRI }, KEY_ID + "=?",
            new String[] { String.valueOf(id) }, null, null, null, null);
        if (cursor != null)
            cursor.moveToFirst();

        kovil Kovil = new kovil(Integer.parseInt(cursor.getString(0)),
            cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), cursor.getString(5), cursor.getString(6), cursor.getString(7), cursor.getString(8), cursor.getString(9), cursor.getString(10), cursor.getString(11), cursor.getString(12), cursor.getString(13));
        // return contact
        cursor.close();
        db.close();

        return Kovil;
        }





        // Getting All Contacts
        public ArrayList<kovil> Get_Temple() {
        try {
            temple_list.clear();

            // Select All Query
            String selectQuery = "SELECT  * FROM " + TABLE_TEMPLE;

            SQLiteDatabase db = this.getWritableDatabase();
            Cursor cursor = db.rawQuery(selectQuery, null);
            System.out.print("CALLED");
            // looping through all rows and adding to list
            if (cursor.moveToFirst()) {
            do {
                kovil Kovil = new kovil();
                Kovil.setID(Integer.parseInt(cursor.getString(0)));
                System.out.print("CALLED"+cursor.getString(0));
                Kovil.settemplename(cursor.getString(1)); 
                Kovil.settempletype(cursor.getString(2)); 
                Kovil.setlatitude(cursor.getString(3)); 
                Kovil.setlongitude(cursor.getString(4)); 
                Kovil.setimage_name(cursor.getString(5)); 
                Kovil.setyear_build(cursor.getString(6)); 
                Kovil.setaddress(cursor.getString(7)); 
                Kovil.setcity(cursor.getString(8)); 
                Kovil.setemail(cursor.getString(9)); 
                Kovil.setwebsite(cursor.getString(10)); 
                Kovil.settelephone1(cursor.getString(11)); 
                Kovil.settelephone2(cursor.getString(12));
                Kovil.setDescription(cursor.getString(13));



                // Adding contact to list
                temple_list.add(Kovil);
            } while (cursor.moveToNext());
            }

            // return contact list
            cursor.close();
            db.close();
            return temple_list;
        } catch (Exception e) {
            // TODO: handle exception
            Log.e("all_temples", "" + e);
        }

        return temple_list;
        }

        public String collect(){

            SQLiteDatabase ourDatabase = this.getWritableDatabase();
            String result="";
            String []column =new String[]{KEY_ID,KEY_TMPNAME,KEY_TMPTYPE,KEY_LATITUDE,KEY_LONGITUDE,KEY_IMGNAME,KEY_YEARBUILD,KEY_ADDRESS,KEY_CITY,KEY_EMAIL,KEY_WEB,KEY_TEL1,KEY_TEL2,KEY_DESCRI};
            Cursor c=ourDatabase.query("templ", column, null, null, null, null,null, null);
            //Cursor c=ourDatabase.query(
            c.moveToFirst();
            int iKEY_ID = c.getColumnIndex(KEY_ID);
            int iKEY_TMPNAME= c.getColumnIndex(KEY_TMPNAME);
            int iKEY_TMPTYPE= c.getColumnIndex(KEY_TMPTYPE);
            for (c.moveToFirst();!c.isAfterLast();c.moveToNext()){
                //for (int x=0;x<5;x++){
            result = result+c.getString(iKEY_ID)+"  "+c.getString(iKEY_TMPNAME)+" \t\t\t\t"+c.getString(iKEY_TMPTYPE)+" \n";
            }
            return result;

        }


        // Getting contacts Count
        public int Get_Total_Temple() {
            String countQuery = "SELECT * FROM " + TABLE_TEMPLE;
            SQLiteDatabase db = this.getReadableDatabase();
            Cursor cursor = db.rawQuery(countQuery, null);
            int count = cursor.getCount();
            cursor.close();
            db.close();
            return count;
        }


    }

我的主显示类(Db_results.java)

    package lk.adspace.jaffnatemples;

    import java.util.ArrayList;

    import 安卓.app.Activity;
    import 安卓.content.Context;
    import 安卓.os.Bundle;
    import 安卓.provider.ContactsContract.Data;
    import 安卓.view.LayoutInflater;
    import 安卓.view.Menu;
    import 安卓.view.MenuInflater;
    import 安卓.view.View;
    import 安卓.view.ViewGroup;
    import 安卓.widget.ArrayAdapter;
    import 安卓.widget.ListView;
    import 安卓.widget.RelativeLayout;
    import 安卓.widget.TextView;

    public class Db_results<LayoutInfalter> extends Activity {



        Temple_Adapter tAdapter;

        ArrayList<kovil> temple_data = new ArrayList<kovil>();
        ListView temple_listview;
        Dbhandler dbhand = new Dbhandler(this); 



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

                        temple_listview = (ListView) findViewById(R.id.list);
                        kovil insertData = new kovil("temple_name", "temple_type", "latitude",  "longitude", "image_name", "year_build", "address", 
                                "city", "email", "website", "telephone1", "telephone2",  "Description");
                            Dbhandler dbhand = new Dbhandler(this); 
                            dbhand .Add_Temple(insertData );


                            kovil insertData2 = new kovil("temple_name2", "temple_type2", "latitude2",  "longitude2", "image_name2", "year_build2", "address2", 
                                    "city2", "email2", "website2", "telephone12", "telephone22",  "Description2");

                                dbhand .Add_Temple(insertData2 );

                              //  int count =dbhand .Get_Total_Temple();

                            // TextView textView = (TextView) findViewById(R.id.count);

                                TextView result = (TextView) findViewById(R.id.textviewres);

                             //String c=collect();
                                result.setText(dbhand.collect());



                             // i want to display all the values in a list over here.
                             System.out.print("CALLING View_all_temples");
                        //View_all_temples();


                    }



                    public void View_all_temples(){

                        System.out.print("iNTO View_all_temples STAGE 1");
                        //temple_data.clear();

                        ArrayList<kovil> temple_array_from_db = dbhand.Get_Temple();
                        System.out.print("CALLED View_all_temples");
                        for (int i = 0; i < temple_array_from_db.size(); i++) {

                            System.out.print("INTO LOOP");

                            int tidno = temple_array_from_db.get(i).getID();
                            String tempname = temple_array_from_db.get(i).gettemplename();
                            String city = temple_array_from_db.get(i).getcity();
                            String telphon = temple_array_from_db.get(i).gettelephone1();
                            kovil kov = new kovil();
                            kov.setID(tidno);
                            kov.settemplename(tempname);
                            kov.setcity(city);
                            kov.settelephone1(telphon);

                            temple_data.add(kov);


                        }
                        dbhand.close();
                        //tAdapter = new Temple_Adapter(Db_results.this, R.layout.display_db_result,temple_data);
                        //tAdapter = new Temple_Adapter(Db_results.this, R.layout.display_db_result);
                        //temple_listview.setAdapter(tAdapter);
                        tAdapter.notifyDataSetChanged();


                    }



                    public class Temple_Adapter extends ArrayAdapter<kovil> {

                        Activity activity;
                        int layoutResourceId;
                        kovil user;
                        LayoutInfalter mInfalter;    
                        ArrayList<kovil> data = new ArrayList<kovil>();
                        ViewHolder holder; 
                        public Temple_Adapter(Context act,
                                int layoutResourceId,  ArrayList<kovil> data) {
                        super(act,layoutResourceId,data);
                        tAdapter = new Temple_Adapter(Db_results.this, R.layout.display_db_result,temple_data);
                        this.layoutResourceId = layoutResourceId;
                        this.activity = (Activity) act;
                        this.data = data;

                        }



                        @SuppressWarnings({ "unchecked", "null" })
                        public View getView(int position, View convertView, ViewGroup parent) { 


                                    if (convertView == null) { 
                                        LayoutInflater mInflater = null;
                                        convertView = mInflater.inflate(R.layout.display_db_result,parent, false);
                                        holder = new ViewHolder(); 
                                        holder.tv = (TextView) convertView.findViewById(R.id.textView1);
                                        convertView.setTag(holder);  // set tag on view
                                   } else { 
                                       holder = (ViewHolder) convertView.getTag();
                                   } 

                                   holder.tv.setText((CharSequence) data.get(position).temple_name);
                                   return convertView; 
                        }
                          public class ViewHolder
                           {
                                TextView tv;
                           }



                    }


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

                }

清单文件

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
        package="lk.adspace.jaffnatemples"
        安卓:versionCode="1"
        安卓:versionName="1.0" xmlns:tools="http://schemas.安卓.com/tools">

        <uses-sdk
            安卓:minSdkVersion="8"
            安卓:targetSdkVersion="17" />

        <permission 安卓:name="lk.adspace.jaffnatemples.permission.MAPS_RECEIVE"
                    安卓:protectionLevel="signature" />

        <uses-permission 安卓:name="lk.adspace.jaffnatemples.permission.MAPS_RECEIVE"/>
        <uses-permission 安卓:name="安卓.permission.INTERNET"/>
        <uses-permission 安卓:name="安卓.permission.ACCESS_NETWORK_STATE"/>
        <uses-permission 安卓:name="安卓.permission.WRITE_EXTERNAL_STORAGE"/>
        <uses-permission 安卓:name="com.google.安卓.providers.gsf.permission.READ_GSERVICES"/>

        <uses-feature 安卓:glEsVersion="0x00020000"
            安卓:required="true"/>




        <application
            安卓:allowBackup="true"
            安卓:icon="@drawable/ic_launcher"
            安卓:label="@string/app_name"
            安卓:theme="@style/AppTheme" >
            <activity
                安卓:name="lk.adspace.jaffnatemples.Main"
                安卓:label="@string/app_name" >
                <intent-filter>
                    <action 安卓:name="安卓.intent.action.MAIN" />

                    <category 安卓:name="安卓.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity 安卓:name=".Search"/>
            <activity
                安卓:name="lk.adspace.jaffnatemples.Search_result"
                安卓:label="@string/app_name" />

            <activity 安卓:name="lk.adspace.jaffnatemples.Map_view"
                安卓:label="@string/app_name" />


            <activity 安卓:name="lk.adspace.jaffnatemples.Db_results"
                安卓:label="@string/app_name" />


            <meta-data 安卓:name="com.google.安卓.maps.v2.API_KEY"
                        安卓:value="AIzaSyBbouC2RTAM-AC2Vh6MYFF2JrzFGDg" />
        </application>

    </manifest>

显示Db_结果。xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
        安卓:id="@+id/textviewres"
        安卓:layout_width="match_parent"
        安卓:layout_height="match_parent" >

        <ListView
            安卓:id="@+id/list"
            安卓:layout_width="match_parent"
            安卓:layout_height="wrap_content"
            安卓:layout_alignParentLeft="true" >

        </ListView>

        <TextView
            安卓:id="@+id/textviewres"
            安卓:layout_width="match_parent"
            安卓:layout_height="wrap_content"
            安卓:layout_alignParentLeft="true"
            安卓:layout_alignParentTop="true"
            安卓:text="TextView" />

        <TextView
            安卓:id="@+id/textView1"
            安卓:layout_width="wrap_content"
            安卓:layout_height="wrap_content"
            安卓:layout_alignParentLeft="true"
            安卓:layout_alignParentTop="true"
            安卓:layout_marginLeft="38dp"
            安卓:text="TextView" />

    </RelativeLayout>

新错误堆栈

02-10 21:45:31.473: E/AndroidRuntime(31356): FATAL EXCEPTION: main
02-10 21:45:31.473: E/AndroidRuntime(31356): java.lang.RuntimeException: Unable to start activity ComponentInfo{lk.adspace.jaffnatemples/lk.adspace.jaffnatemples.Db_results}: java.lang.ClassCastException: 安卓.widget.TextView cannot be cast to 安卓.widget.ListView
02-10 21:45:31.473: E/AndroidRuntime(31356):    at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2343)
02-10 21:45:31.473: E/AndroidRuntime(31356):    at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395)
02-10 21:45:31.473: E/AndroidRuntime(31356):    at 安卓.app.ActivityThread.access$600(ActivityThread.java:162)
02-10 21:45:31.473: E/AndroidRuntime(31356):    at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1364)
02-10 21:45:31.473: E/AndroidRuntime(31356):    at 安卓.os.Handler.dispatchMessage(Handler.java:107)
02-10 21:45:31.473: E/AndroidRuntime(31356):    at 安卓.os.Looper.loop(Looper.java:194)
02-10 21:45:31.473: E/AndroidRuntime(31356):    at 安卓.app.ActivityThread.main(ActivityThread.java:5371)
02-10 21:45:31.473: E/AndroidRuntime(31356):    at java.lang.reflect.Method.invokeNative(Native Method)
02-10 21:45:31.473: E/AndroidRuntime(31356):    at java.lang.reflect.Method.invoke(Method.java:525)
02-10 21:45:31.473: E/AndroidRuntime(31356):    at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
02-10 21:45:31.473: E/AndroidRuntime(31356):    at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:600)
02-10 21:45:31.473: E/AndroidRuntime(31356):    at dalvik.system.NativeStart.main(Native Method)
02-10 21:45:31.473: E/AndroidRuntime(31356): Caused by: java.lang.ClassCastException: 安卓.widget.TextView cannot be cast to 安卓.widget.ListView
02-10 21:45:31.473: E/AndroidRuntime(31356):    at lk.adspace.jaffnatemples.Db_results.onCreate(Db_results.java:36)
02-10 21:45:31.473: E/AndroidRuntime(31356):    at 安卓.app.Activity.performCreate(Activity.java:5122)
02-10 21:45:31.473: E/AndroidRuntime(31356):    at 安卓.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
02-10 21:45:31.473: E/AndroidRuntime(31356):    at  安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307)
02-10 21:45:31.473: E/AndroidRuntime(31356):    ... 11 more

有人能帮我修复这个错误吗


共 (2) 个答案

  1. # 1 楼答案

     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/textviewres"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
    

    从中删除ID

    relative layout和textview都有相同的id,当您在“活动”中获取它时,它将返回relative layout对象

    将其从相对布局中删除,只需将其保留在文本视图中即可

  2. # 2 楼答案

    在代码中: convertView=mInflater。充气(右布局,显示结果,父项,假); 您需要对仅包含文本视图的布局进行充气