运行记事本应用程序时出错

时间:2017-08-07 10:34:36

标签: android

我即将制作Android应用程序但由于FATAL EXCEPTION:主要应用程序在运行时继续停止

这是我的主要活动

package com.example.notepad.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;

import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    Button ADD;
    ListView li;
    List<Note> notes;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         ADD=(Button)findViewById(R.id.addnote);
         ADD.setOnClickListener(this);
        li= (ListView) findViewById(R.id.listview);
        Databasehandler data =new Databasehandler(this);
        notes= data.getAllNotes();
        adaptor adapt=new adaptor(this,notes);
        try {
            li.setAdapter(adapt);
        }catch (NullPointerException e){
            Log.e("a","adaptor not found");
        }
        li.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l){


               /* Intent intent=new Intent(MainActivity.this,EditNoteActivity.class);
                Bundle bundle=new Bundle() ;
                bundle.putString("source","editpress");
                bundle.putString("noteTitle",note.getTitle());
                bundle.putString("noteDescription",note.getDescription());
                bundle.putInt("noteId",note.getId());
                intent.putExtras(bundle);*/
            }
            }
        );
}
    @Override
    public void onClick(View view) {
        switch (view.getId()) {
        case R.id.addnote:
            Intent myIntent = new Intent(MainActivity.this, EditNoteActivity.class);
            Bundle bundle = new Bundle();
            bundle.putString("source", "addPress");
            myIntent.putExtras(bundle);
            startActivity(myIntent);
            break;
         default:
            break;



    }
}
}

这是我的数据库处理程序

package com.example.notepad.myapplication;

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

import java.util.ArrayList;
import java.util.List;


 public class Databasehandler {
    DatabaseHandle data;


     public  Databasehandler(Context context) {
        data=new DatabaseHandle(context);
    }
/*public  void DeleteNote(String id){


}*/

    public void addnote() {
        Note note = new Note();
        SQLiteDatabase db = data.getWritableDatabase();
        EditNoteActivity edit = new EditNoteActivity();
        ContentValues values = new ContentValues();
        values.put("title", note.getTitle());
        values.put("description", note.getDescription());
        db.insert(DatabaseHandle.TableName, null, values);
        db.close();
    }

    public List<Note> getAllNotes() {
        List<Note> notes=new ArrayList<Note>();
        SQLiteDatabase db= data.getWritableDatabase();
        Cursor c = db.query(DatabaseHandle.TableName, new String[] { DatabaseHandle.TableId,
                DatabaseHandle.TableTitle, DatabaseHandle.TableDescription}, DatabaseHandle.TableId+ "=?",new String[] { String.valueOf(DatabaseHandle.TableId) } ,  null, null, null);
        if(c!=null){
        while (c.moveToNext()) {
            int index0 = c.getColumnIndex(DatabaseHandle.TableId);
            int index1 = c.getColumnIndex(DatabaseHandle.TableTitle);
            int index2 = c.getColumnIndex(DatabaseHandle.TableDescription);

            Note note = new Note();
            note.setId(Integer.parseInt(c.getString(index0)));
            note.setTitle(c.getString(index1));
            note.setDescription(c.getString(index2));
            notes.add(note);
        }}
        return notes;
    }


    static class DatabaseHandle extends SQLiteOpenHelper {
        private static final String DatabaseName = "database";
        private static final int DatabaseVersion = 3;
        private static final String TableName = "notes";
        private static final String TableId = "_id";
        private static final String TableTitle = "title";
        private static final String TableDescription = "description";
        private static final String TableCreate = "CREATE TABLE IF NOT EXITS" + TableName + "(" + TableId + "INTEGER PRIMARY KEY AUTOINCREMENT" +
                TableTitle + "TEXT " + TableDescription + "TEXT";
        private static final String TableDrop = "DROP TABLE IF EXITS" + TableName;

        DatabaseHandle(Context context) {
            super(context, DatabaseName, null, DatabaseVersion);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            try {
                db.execSQL(TableCreate);
            } catch (SQLiteException e) {
                e.printStackTrace();
                Log.e("D", "table not created" );
            }

        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int i, int i1) {
        try{    db.execSQL(TableDrop);
            onCreate(db);}
        catch (SQLiteException e){
            Log.e("F","version not created");
        }

        }

    }
}

这是我的编辑活动

package com.example.notepad.myapplication;


import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.EditText;
import android.widget.Toast;




   public class EditNoteActivity extends AppCompatActivity {
    String A,B;
    int id;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_edit_notes);
        EditText editText = (EditText) findViewById(R.id.editText2);
        EditText editText1 = (EditText) findViewById(R.id.editText);
        String A = editText.getText().toString();
        String B = editText1.getText().toString();
        Note note = new Note();
        note.setDescription(A);
        note.setTitle(B);
        Bundle bundle=getIntent().getExtras();
        if(bundle!=null && bundle.containsKey("source")){
            if(bundle.getString("source").equalsIgnoreCase("editpress")){
                isvalid();
                id=bundle.getInt("noteId");
                A=bundle.getString("noteTitle");
                B=bundle.getString("noteDescription");
            }else if(bundle.getString("source").equalsIgnoreCase("addPress")&& !isvalid()){
                Databasehandler data=new Databasehandler(this);
                data.addnote();
            }else{
                Toast.makeText(this,"invalid argument",Toast.LENGTH_SHORT).show();
                super.onBackPressed();
            }
        }
    }
    public boolean isvalid(){
        if(A.isEmpty()&&B.isEmpty()){
            Toast.makeText(this,"please enter tittle and description",Toast.LENGTH_SHORT).show();
            return  false;
        }
        else if(A.isEmpty()){
            Toast.makeText(this,"please enter title",Toast.LENGTH_SHORT).show();
            return false;
        }else if(B.isEmpty()){
            Toast.makeText(this,"please enter description",Toast.LENGTH_SHORT).show();
            return false;
        }
        return true;
    }

这是错误

08-07 15:14:46.966 2143-2143/com.example.notepad.myapplication E/SQLiteLog: (1) no such table: notes
08-07 15:14:46.967 2143-2143/com.example.notepad.myapplication D/AndroidRuntime: Shutting down VM
08-07 15:14:46.967 2143-2143/com.example.notepad.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                 Process: com.example.notepad.myapplication, PID: 2143
                                                                                 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.notepad.myapplication/com.example.notepad.myapplication.MainActivity}: android.database.sqlite.SQLiteException: no such table: notes (code 1): , while compiling: SELECT _id, title, description FROM notes WHERE _id=?
                                                                                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
                                                                                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
                                                                                     at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
                                                                                     at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                     at android.os.Looper.loop(Looper.java:154)
                                                                                     at android.app.ActivityThread.main(ActivityThread.java:6077)
                                                                                     at java.lang.reflect.Method.invoke(Native Method)
                                                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
                                                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
                                                                                  Caused by: android.database.sqlite.SQLiteException: no such table: notes (code 1): , while compiling: SELECT _id, title, description FROM notes WHERE _id=?
                                                                                     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
                                                                                     at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
                                                                                     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
                                                                                     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
                                                                                     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
                                                                                     at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
                                                                                     at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
                                                                                     at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1318)
                                                                                     at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1165)
                                                                                     at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1036)
                                                                                     at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1204)
                                                                                     at com.example.notepad.myapplication.Databasehandler.getAllNotes(Databasehandler.java:41)
                                                                                     at com.example.notepad.myapplication.MainActivity.onCreate(MainActivity.java:27)
                                                                                     at android.app.Activity.performCreate(Activity.java:6662)
                                                                                     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                                                                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
                                                                                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
                                                                                     at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                                                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
                                                                                     at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                     at android.os.Looper.loop(Looper.java:154) 
                                                                                     at android.app.ActivityThread.main(ActivityThread.java:6077) 
                                                                                     at java.lang.reflect.Method.invoke(Native Method) 
                                                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
                                                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 

这里是吸气者和二传手

package com.example.notepad.myapplication;


  public  class Note {
   public int id=0;
   public String title="";
    public String description="";

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title=title;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id=id;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

2 个答案:

答案 0 :(得分:1)

private static final String TableCreate = "CREATE TABLE IF NOT EXITS " + TableName + "(" + TableId + "INTEGER PRIMARY KEY AUTOINCREMENT," +
                TableTitle + "TEXT ," + TableDescription + "TEXT)";

错过逗号(,)并在存在关键字"CREATE TABLE IF NOT EXITS "+TableName

之后放置空格

检查并更新

答案 1 :(得分:0)

我通过更改DatabaseName =“database.db”

解决了这个问题