我是Android新手,现在在从SQLite
到editText
检索数据时遇到问题。当按下该行时,应用程序崩溃了。有谁知道如何解决这一问题?是不是因为cursor
未初始化或因为sql
问题?希望有人能帮助我找出问题。谢谢。
c = database.rawQuery("SELECT i.Name, i.Date, i.Status, i.Weather, w.Subcontractors, w.NumberOfPerson, w.NumberOfHours FROM Information i LEFT JOIN WorkForce w ON w.TInfo_id = i.ID" +
" LEFT JOIN WorkDetails wd ON wd.Twf_id = w.ID WHERE i.Name = ? AND i.Date= ? ",
UpdatePage.java
package com.example.project.project;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
import com.example.project.project.API.InfoAPI;
import com.example.project.project.TimeSheet.Details;
import com.example.project.project.TimeSheet.Force;
import com.example.project.project.TimeSheet.Info;
import com.example.project.project.database.MyDatabaseHelper;
public class UpdatePage extends AppCompatActivity {
InfoAPI sqlcon;
private SQLiteDatabase database;
private MyDatabaseHelper dbHelper;
private Cursor c;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dbHelper = new MyDatabaseHelper(this);
setContentView(R.layout.updatepage);
final String name1 = getIntent().getExtras().getString("name");
final String date = getIntent().getExtras().getString("date");
RetrievePage(name1, date);
}
public void RetrievePage(String name, String date) {
final String name2 = name;
final String date2 = date;
database = dbHelper.getWritableDatabase();
c = database.rawQuery("SELECT i.Name, i.Date, i.Status, i.Weather, w.Subcontractors, w.NumberOfPerson, w.NumberOfHours FROM Information i LEFT JOIN WorkForce w ON w.TInfo_id = i.ID LEFT JOIN WorkDetails wd ON wd.Twf_id = w.ID WHERE i.Name = ? AND i.Date= ? ",
new String[]{String.valueOf(name2),String.valueOf(date2)}, null);
final EditText name3 = (EditText) findViewById(R.id.editText9);
final EditText date3 = (EditText) findViewById(R.id.editText12);
name3.setText(name2);
date3.setText(date2);
final Spinner weather3 = (Spinner) findViewById(R.id.spinner5);
final Spinner status3 = (Spinner) findViewById(R.id.spinner7);
final EditText subC3 = (EditText) findViewById(R.id.editText17);
final EditText noP = (EditText) findViewById(R.id.editText18);
final EditText noH = (EditText) findViewById(R.id.editText19);
final Spinner poject3 = (Spinner) findViewById(R.id.spinner8);
if (c != null) {
c.moveToFirst();
while (c.moveToNext()) {
Info I = new Info();
Force WF = new Force();
Details WD = new Details();
String Weather = c.getString(c.getColumnIndex(MyDatabaseHelper.Weather));
String Status = c.getString(c.getColumnIndex(MyDatabaseHelper.Status));
String SubC = c.getString(c.getColumnIndex(MyDatabaseHelper.Subcontractors));
String NoP = c.getString(c.getColumnIndex(MyDatabaseHelper.NumberOfPerson));
String NoH = c.getString(c.getColumnIndex(MyDatabaseHelper.NumberOfHours));
String Project = c.getString(c.getColumnIndex(MyDatabaseHelper.Project));
//I.setWeather(Weather);
// I.setStatus(Status);
WF.setSubcontractors(SubC);
WF.setNoOfPerson(NoP);
WF.setNoOfHours(NoH);
//WD.setProject(Project);
subC3.setText(SubC);
noP.setText(NoP);
noH.setText(NoH);
}
}
}
}
错误LogCat
ComponentInfo{com.example.project.project/com.example.project.project.UpdatePage}: java.lang.IllegalStateException: Couldn't read row 1, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.IllegalStateException: Couldn't read row 1, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
at android.database.CursorWindow.nativeGetString(Native Method)
at android.database.CursorWindow.getString(CursorWindow.java:438)
答案 0 :(得分:0)
moveToFirst()
移至第一行。
moveToNext()
然后移到第二行。
但你的问题是缺少专栏。 当您不知道列是否存在时,将使用getColumnIndex()。 要获取您认为存在的列的索引,请使用getColumnIndexOrThrow(),以便您在错误消息中立即看到您在查询中忘记了哪一列。