2014-12-23 4 views
0

나는 NullPointerException을 얻고 있습니다. 아래에서 Logcat 및 관련 코드를 찾을 수 있습니다.null 커서 예외 CursorAdapter

로그 캣 :

12-23 00:17:35.330: E/AndroidRuntime(2019): FATAL EXCEPTION: main 
12-23 00:17:35.330: E/AndroidRuntime(2019): Process: com.android.timesheet, PID: 2019 
12-23 00:17:35.330: E/AndroidRuntime(2019): java.lang.NullPointerException 
12-23 00:17:35.330: E/AndroidRuntime(2019):  at com.android.timesheet.adapter.CustomCursorAdapter$1.onClick(CustomCursorAdapter.java:54) 
12-23 00:17:35.330: E/AndroidRuntime(2019):  at android.view.View.performClick(View.java:4438) 
12-23 00:17:35.330: E/AndroidRuntime(2019):  at android.view.View$PerformClick.run(View.java:18422) 
12-23 00:17:35.330: E/AndroidRuntime(2019):  at android.os.Handler.handleCallback(Handler.java:733) 
12-23 00:17:35.330: E/AndroidRuntime(2019):  at android.os.Handler.dispatchMessage(Handler.java:95) 
12-23 00:17:35.330: E/AndroidRuntime(2019):  at android.os.Looper.loop(Looper.java:136) 
12-23 00:17:35.330: E/AndroidRuntime(2019):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
12-23 00:17:35.330: E/AndroidRuntime(2019):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-23 00:17:35.330: E/AndroidRuntime(2019):  at java.lang.reflect.Method.invoke(Method.java:515) 
12-23 00:17:35.330: E/AndroidRuntime(2019):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
12-23 00:17:35.330: E/AndroidRuntime(2019):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
12-23 00:17:35.330: E/AndroidRuntime(2019):  at dalvik.system.NativeStart.main(Native Method) 

CustomCursorAdapter.java : 나는 모든 목록보기 행 항목을 삭제하려면 삭제 버튼을 사용하고

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.database.Cursor; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.CursorAdapter; 
import android.widget.TextView; 

import com.android.timesheet.ModifyMember; 
import com.android.timesheet.R; 

public class CustomCursorAdapter extends CursorAdapter { 

    Button delete_btn; 
    TextView memID_tv, memName_tv; 
    @SuppressWarnings("deprecation") 
    public CustomCursorAdapter(Activity context, Cursor c) { 
     super(context, c); 
    } 

    @Override 
    public View newView(Context context, Cursor cursor, ViewGroup parent) { 
     // when the view will be created for first time, 
     // we need to tell the adapters, how each item will look 
     LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
     View retView = inflater.inflate(R.layout.single_row_item, parent, false); 

     return retView; 
    } 

    @Override 
    public void bindView(View view, final Context context, Cursor cursor) { 
     // here we are setting our data 
     // that means, take the data from the cursor and put it in views 

     TextView textViewPersonName = (TextView) view.findViewById(R.id.tv_person_name); 
     textViewPersonName.setText(cursor.getString(cursor.getColumnIndex(cursor.getColumnName(1)))); 
     delete_btn=(Button)view.findViewById(R.id.delete_btn); 

     delete_btn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       memID_tv = (TextView)v.findViewById(R.id.member_id); 
       memName_tv = (TextView)v.findViewById(R.id.member_name); 

       String memberID_val = memID_tv.getText().toString();; ---->54th Line 
       String memberName_val = memName_tv.getText().toString(); 

       Intent i = new Intent(context, 
         ModifyMember.class); 
       i.putExtra("memberName", memberName_val); 
       i.putExtra("memberID", memberID_val); 
       ((Activity)context).startActivity(i); 

      } 
     }); 

    } 
} 

. 그 시점에서 나는 NullPointerException을 얻고 있습니다. 버튼의도이다

+0

NPE는 CustomCursorAdapter.java'라인에 : 54'. 'Intent i = new Intent (context, ModifyMember.class);에서'context'가 null인지 확인하십시오; –

답변

0

사용 view (행의 뷰) 대신 onClick 방법의 v 매개 변수의 :의 Bindview에서

 delete_btn=(Button)view.findViewById(R.id.delete_btn); 
     delete_btn.setTag(view); 
     delete_btn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       View rowview=(View)v.getTag(); 
       memID_tv = (TextView)rowview.findViewById(R.id.member_id); 
       memName_tv = (TextView)rowview.findViewById(R.id.member_name); 

      } 
     }); 
+0

고맙습니다. 저에게 도움이되었습니다. –

+0

그런 다음 바인드 뷰 메서드 –

+0

에 최종 수정자를 추가했습니다. –

0

사용 view 대신 v

memID_tv = (TextView)view.findViewById(R.id.member_id); 

는 this-

시도
if (view == null) { 
      view = inflater.inflate(R.layout.single_row_item, parent, null); 
} 
TextView textViewPersonName = (TextView) view.findViewById(R.id.tv_person_name); 
     textViewPersonName.setText(cursor.getString(cursor.getColumnIndex(cursor.getColumnName(1)))); 
     delete_btn=(Button)view.findViewById(R.id.delete_btn); 
. 
. 
. 
0

클릭 한보기에서보기가 표시되지만 루트보기에서보기를 가져와야합니다.

   memID_tv = (TextView)v. findViewById(R.id.member_id); 
       memName_tv = (TextView)v.findViewById(R.id.member_name); 

변경이로이 라인은 :

   memID_tv = (TextView)view. findViewById(R.id.member_id); 
       memName_tv = (TextView)view.findViewById(R.id.member_name);