2017-04-24 2 views
0

onCreate()에서도 어댑터를 추가하려고 시도했으며 null 포인터 예외를 발생시킵니다. 'null에서 listVIew.setAdapter 호출 시도 객체 참조.null 객체 참조에 대해 Adapter.notifyDataSetChanged()를 호출하려고합니다.

여기 내 주요 활동 내에서 notifyDataSetChange()를 사용하는 코드입니다.

import static com.name.sample.Tab1.adapter; 


public class Requests extends AsyncTask<String, Void, String> { 

    @Override 
    protected String doInBackground(String... params) { 

     Cursor c = myDB.rawQuery("SELECT * FROM requests", null); 

     int aIndex = c.getColumnIndex("name"); 
     int bIndex = c.getColumnIndex("nick"); 
     int cIndex = c.getColumnIndex("num"); 

     name.clear(); 
     nick.clear(); 
     number.clear(); 

     if (c.moveToFirst()){ 

      do { 

       name.add(c.getString(aIndex)); 
       nick.add(c.getString(bIndex)); 
       number.add(c.getInt(cIndex)); 

      } while (c.moveToNext()); 
     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(s); 


     adapter.notifyDataSetChanged(); 


    } 
} 

여기 여기 내 TAB1 코드 입니다

public class Tab1 extends Fragment { 

static ListView listNotifications; 
final static ArrayList<String> name = new ArrayList<>(); 
static ArrayList<Integer> number = new ArrayList<>(); 
static ArrayList<String> nick = new ArrayList<>(); 

static ImageAdapter adapter; 


public static class ImageAdapter extends ArrayAdapter<String> { 
    private final Context context; 
    private final String[] values; 

    public ImageAdapter (Context context, String[] values) { 
     super(context, R.layout.list_with_icons, values); 
     this.context = context; 
     this.values = values; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     View rowView = inflater.inflate(R.layout.list_with_icons, parent, false); 

     TextView textView = (TextView) rowView.findViewById(R.id.textViewName); 

     ImageView imageView = (ImageView) rowView.findViewById(R.id.imagePicture); 

     textView.setText(values[position]); 
     // Change the icon for Windows and iPhone 


     return rowView; 
    } 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.tab1layout, container, false); 

    String[] nameString = new String[name.size()]; 
    nameString = name.toArray(nameString); 

    adapter = new ImageAdapter (getActivity(), nameString); 



    listNotifications =(ListView)rootView.findViewById(R.id.listNotifications); 

listNotifications.setAdapter(adapter); 




    return rootView; 


}} 

답변

1

사용하십시오 어댑터에 대한 코드입니다 : adapterClass.this.notifyDataSetChanged()

@Override 
protected void onPostExecute(String s) { 
    super.onPostExecute(s); 
    InvitedAdapter.this.notifyDataSetChanged(); 
} 
+0

()를보십시오; 그것은 둘러싸는 클래스가 아니라는 에러를줍니다. –

+0

당신은 다음을 사용할 수 있습니다 :'Tab1.InvitedAdapter.notifyDataSetChanged();' – rafsanahmad007

+0

notifyDataSetChanged(); 정적 컨텍스트에서 참조 할 수 없습니다. 예, 어댑터를 비 정적으로 변경했습니다. –

1

onPostExcecute()에리스트 뷰에서 잘못된 어댑터를 추가했습니다. 그것은 onCreateView()에서 다음과 같이해야한다 :

listNotifications.setAdapter(adapter); 

내가 Tab1.InvitedAdapter.this.notifyDataSetChanged로 사용이 :

+0

오해 때문에 미안하지만 실제로 변수를 간단하게 유지하기 위해 이름을 변경했습니다. 나는 하나를 놓쳤다. 이것은 해결책이 아닙니다. 고맙습니다. –

+0

올바른 어댑터를 얻지 못하기 때문에 문제가 listview에 있다고 생각합니다. @ 함자 민 – Sam

관련 문제