2011-11-25 5 views
0

이 코드에서 내가 뭘 잘못했는지 알 수 있습니까? DBUtils를 사용하여 일부 텍스트 상자를 채우지 만 "Get"이있는 줄에 "널 포인터 예외"가 표시됩니다. 나는 또한 토스트를 사용하여 intCurrentId에 실제로 값이 있는지 확인했습니다.DBUtils를 사용하는 널 포인터 예외

저는 여기에 사용되는 코드는 다음과 같습니다

Sub ListViewPeopleEventHandler_ItemClick (Position As Int, Value As Object) 

    ' Update the details area. 
    '------------------------- 
    Dim valuesFromTheListView() As String 
    valuesFromTheListView = Value 

    intCurrentId = valuesFromTheListView(0) 

    Dim mapOfTableFields As Map 
    mapOfTableFields = DBUtils.ExecuteMap(SQL, _ 
      "SELECT Id, FirstName, LastName FROM PeopleToVisit WHERE id = ?", _ 
      Array As String(intCurrentId)) 

    ToastMessageShow(intCurrentId, False) 

    ' I get the error on this next line. 
    '------------------------------------- 
    EditTextFirstName.Text = mapOfTableFields.Get("FirstName") 

    EditTextFirstName.RequestFocus 
    EditTextFirstName.SelectAll 
    EditTextFirstName.Color = Colors.Cyan 

    EditTextLastName.Text = mapOfTableFields.Get("LastName") 
    EditTextLastName.RequestFocus 
    EditTextLastName.Color = Colors.Cyan 

    tableMode = "Edit" 
    Activity.Title = "Maintenance - Result Of Visit *** EDIT ***" 
End Sub 

이 데이터베이스 테이블의 구조 :

SQL.ExecNonQuery("CREATE TABLE PeopleToVisit (" & _ 
       "Id INTEGER PRIMARY KEY, " & _ 
       "FirstName TEXT, " & _ 
       "LastName TEXT, " & _ 
       "Address1 TEXT, " & _ 
       "Address2 TEXT, " & _ 
       "City TEXT, " & _ 
       "State TEXT, " & _ 
       "Zip TEXT, " & _ 
       "PrimaryPhone TEXT, " & _ 
       "SecondaryPhone TEXT, " & _ 
       "Email TEXT, " & _ 
       "LastVisitNote TEXT " & _ 
       ")") 

감사합니다.

+0

intCurrentID에 실제로 값이 있는지 확인했지만 DB에 해당 ID의 행이 있는지 확인 했습니까? 또한 게시물을 작성할 때 게시물 아래의 미리보기 창에서 코드 형식을 확인하십시오. 형식을 지정하면 읽을 때 좌우 스크롤이 필요하지 않으므로 훨씬 쉽습니다. –

+0

안녕 켄, 거기에 있어야합니다. 왜냐하면 ID는 목록보기에 있던 값에서 왔기 때문에 그 ID를 사용하여 쿼리를 수행하기 때문입니다. 이 서브 루틴의 의도 된 목적은 목록보기에서 값을 사용하고 다른 텍스트 상자에 표시 될 수 있도록 데이터베이스 테이블의 나머지 세부 사항을 얻기 위해 조회를 수행하는 것입니다. –

+0

나는 그것을해야한다고 생각한다. :) 그러나 당신은 그것이 * *인지 확인 했습니까? 즉, 'intCurrentID'에 값이있을뿐만 아니라 ** 유효한 ** 값인지 확인 했습니까? 만약 당신이 데이터베이스에 3 명을 삽입했고'intCurrentID' 값이 5라면 그것은 중요 할 수 있습니다. :) –

답변

0

DBUtils 버전이 작동하지 않는 이유는 모르겠지만이 수정 된 버전의 하위 프로 시저와 같이 커서를 사용하면 모든 것이 정상적으로 작동합니다.

Sub ListViewPeopleEventHandler_ItemClick (Position As Int, Value As Object) 

    ' Update the details area. 
    '------------------------- 
    Dim valuesFromTheListView() As String 
    Dim oRecordSet As Cursor 

    valuesFromTheListView = Value 
    intCurrentId = valuesFromTheListView(0) 

    oRecordSet = SQL.ExecQuery(_ 
     "SELECT Id, FirstName, LastName " & _ 
      "FROM PeopleToVisit " & _ 
     "WHERE id = " & intCurrentId) 

    If oRecordSet.RowCount > 0 Then 
     oRecordSet.Position = 0 

     EditTextFirstName.Text = oRecordSet.GetString("FirstName") 
     EditTextLastName.Text = oRecordSet.GetString("LastName") 
    End If 

    EditTextFirstName.RequestFocus 
    EditTextFirstName.SelectAll 
    EditTextFirstName.Color = Colors.Cyan 

    EditTextLastName.RequestFocus 
    EditTextLastName.Color = Colors.Cyan 

    tableMode = "Edit" 
    Activity.Title = "Maintenance - Result Of Visit *** EDIT ***" 
End Sub