2014-03-13 51 views
0

我想处理一些数据库操作喜欢插入。我能够成功但当我尝试检索存储的信息我得到这个异常。我已经检查了几次培训视频(上youtube),并不能找出什么是错的安卓NullPointerException异常检索数据

java.lang.NullPointerException此时tvresult.setText(data);

public static final String KEY_ROWID="id"; 
public static final String KEY_NAME="u_name"; 
public static final String KEY_PASS="u_pass"; 


btnshow.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       try { 
        db.Open(); 
        String data=db.getThat(); 
        tvresult.setText(data); 
       } catch (SQLException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       db.Close(); 

      } 
     }); 




public String getThat() { 
     // TODO Auto-generated method stub 

    String columns[]={KEY_ROWID,KEY_NAME,KEY_PASS}; 

    Cursor c=ourdatabase.query(DB_TABLE,columns,null,null,null,null,null); 

    int iRow=c.getColumnIndex(KEY_ROWID); 
    int iName=c.getColumnIndex(KEY_NAME); 
    int iPass=c.getColumnIndex(KEY_PASS); 

    String result=""; 


    for (c.moveToFirst();!c.isAfterLast();c.moveToNext()) { 
     result=result+"Name :"+c.getString(iName)+"Pass :"+c.getString(iPass); 

    } 


return result; 
    } 

logcat的:

30: E/AndroidRuntime(1711): FATAL EXCEPTION: main 
03-13 02:59:49.630: E/AndroidRuntime(1711): Process: com.example.sqllite, PID: 1711 
03-13 02:59:49.630: E/AndroidRuntime(1711): java.lang.NullPointerException 
03-13 02:59:49.630: E/AndroidRuntime(1711):  at com.example.sqllite.Db$1.onClick(Db.java:33) 
03-13 02:59:49.630: E/AndroidRuntime(1711):  at android.view.View.performClick(View.java:4424) 
03-13 02:59:49.630: E/AndroidRuntime(1711):  at android.view.View$PerformClick.run(View.java:18383) 
03-13 02:59:49.630: E/AndroidRuntime(1711):  at android.os.Handler.handleCallback(Handler.java:733) 
03-13 02:59:49.630: E/AndroidRuntime(1711):  at android.os.Handler.dispatchMessage(Handler.java:95) 
03-13 02:59:49.630: E/AndroidRuntime(1711):  at android.os.Looper.loop(Looper.java:137) 
03-13 02:59:49.630: E/AndroidRuntime(1711):  at android.app.ActivityThread.main(ActivityThread.java:4998) 
03-13 02:59:49.630: E/AndroidRuntime(1711):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-13 02:59:49.630: E/AndroidRuntime(1711):  at java.lang.reflect.Method.invoke(Method.java:515) 
03-13 02:59:49.630: E/AndroidRuntime(1711):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777) 
03-13 02:59:49.630: E/AndroidRuntime(1711):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593) 
03-13 02:59:49.630: E/AndroidRuntime(1711):  at dalvik.system.NativeStart.main(Native Method) 
03-13 02:59:55.470: I/Choreographer(1824): Skipped 160 frames! The application may be doing too much work on its main thread. 
03-13 03:10:48.065: W/EGL_emulation(1824): eglSurfaceAttrib not implemented 
03-13 03:10:51.845: D/dalvikvm(1887): GC_FOR_ALLOC freed 53K, 4% free 3275K/3384K, paused 2ms, total 6ms 
03-13 03:10:51.945: W/EGL_emulation(1887): eglSurfaceAttrib not implemented 
03-13 03:10:53.665: D/AndroidRuntime(1887): Shutting down VM 
03-13 03:10:53.665: W/dalvikvm(1887): threadid=1: thread exiting with uncaught exception (group=0xb0d51b08) 
03-13 03:10:53.665: E/AndroidRuntime(1887): FATAL EXCEPTION: main 
03-13 03:10:53.665: E/AndroidRuntime(1887): Process: com.example.sqllite, PID: 1887 
03-13 03:10:53.665: E/AndroidRuntime(1887): android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 5 
03-13 03:10:53.665: E/AndroidRuntime(1887):  at android.database.AbstractCursor.checkPosition(AbstractCursor.java:426) 
03-13 03:10:53.665: E/AndroidRuntime(1887):  at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136) 
03-13 03:10:53.665: E/AndroidRuntime(1887):  at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50) 
03-13 03:10:53.665: E/AndroidRuntime(1887):  at com.example.sqllite.Database.getThat(Database.java:116) 
03-13 03:10:53.665: E/AndroidRuntime(1887):  at com.example.sqllite.Db$1.onClick(Db.java:32) 
03-13 03:10:53.665: E/AndroidRuntime(1887):  at android.view.View.performClick(View.java:4424) 
03-13 03:10:53.665: E/AndroidRuntime(1887):  at android.view.View$PerformClick.run(View.java:18383) 
03-13 03:10:53.665: E/AndroidRuntime(1887):  at android.os.Handler.handleCallback(Handler.java:733) 
03-13 03:10:53.665: E/AndroidRuntime(1887):  at android.os.Handler.dispatchMessage(Handler.java:95) 
03-13 03:10:53.665: E/AndroidRuntime(1887):  at android.os.Looper.loop(Looper.java:137) 
03-13 03:10:53.665: E/AndroidRuntime(1887):  at android.app.ActivityThread.main(ActivityThread.java:4998) 
03-13 03:10:53.665: E/AndroidRuntime(1887):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-13 03:10:53.665: E/AndroidRuntime(1887):  at java.lang.reflect.Method.invoke(Method.java:515) 
03-13 03:10:53.665: E/AndroidRuntime(1887):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777) 
03-13 03:10:53.665: E/AndroidRuntime(1887):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593) 
03-13 03:10:53.665: E/AndroidRuntime(1887):  at dalvik.system.NativeStart.main(Native Method) 
03-13 03:10:55.675: D/(1906): HostConnection::get() New Host Connection established 0xb8204250, tid 1906 
+2

发布您的logcat错误跟踪。 –

+0

你能把你的日志猫错误信息 –

+0

完整的日志猫请 – Riskhan

回答

1

显示java.lang.NullPointerException此时tvresult.setText(数据);

因此tvresultnull。初始化它,例如在setContentView()之后findViewById(),传入布局中的有效视图ID。

您的logcat中看到的CursorIndexOutOfBoundsException与您发布的此版本代码无关。

+0

CursorIndexOutOfBoundsException确实与这部分相关的代码,因为他的投影中没有BaseColumns._ID列 –

+0

@ LeMoN.xaH这只会是游标适配器的问题,而OP没有它。为什么它没有关联是因为它是来自'getString()'列访问,光标中有5列,OP的代码只有3个。 – laalto

+0

现在感觉像是一个ididot。感谢你。伙计。但是,哪一行表明你怎么知道 – user2583511

相关问题