아안녕하세요 독학하는 학생입니다.
현재 서버에서 정보를 다운로드받아 프래그먼트에(뷰페이저) 정의한 listView에 출력하려고 하는데
다른 어플에서 정상적으로 동작하던 소스를 그대로 가져와서 약간 변형했더니 저 짜증나는 널오브젝트리퍼런스뭐시기가 뜨네요..
일단 서버에서 데이터들이 다운로드되어 ArrayList에 저장되는것을 확인했습니다.
그저 리스트뷰.setAdapter(adapter)에서 널포인터익셉션이 나온다는게 문젠데
제가 어디 잘못한곳이 있나요?? 도저히 모르겠네요 프래그먼트 관련해서 처음 만져보는거라..
혹시나해서 커스텁어댑터도 함께 올립니다.
무식한 초보를 구원해주시옵소서...
public class MainActivity extends AppCompatActivity {
int MAX_PAGE=2;
Fragment cur_fragment = new Fragment();
ViewPager viewpager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewpager = (ViewPager) findViewById(R.id.viewpager);
viewpager.setAdapter(new adapter(getSupportFragmentManager()));
}
private class adapter extends FragmentPagerAdapter {
생략...
}
public static class WaitingLayout extends android.support.v4.app.Fragment{
변수 선언 생략...
ListView waitingList;
PWaitingTableDown task;
ListViewAdapter adapter;
ArrayList<WaitingListItem> waitingListItem = new ArrayList<>();
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
LinearLayout linearLayout = (LinearLayout) inflater.inflate(R.layout.waiting_layout,container,false);
waitingList = (ListView) container.findViewById(R.id.waitingList);
waitingteam = (TextView) container.findViewById(R.id.waitingteam);
callnum = (TextView) container.findViewById(R.id.callnum);
task = new PWaitingTableDown();
task.execute("생략");
return linearLayout;
}
public class PWaitingTableDown extends AsyncTask<String, Integer, String> {
StringBuilder jsonHtml = new StringBuilder();
doInBackground생략...
protected void onPostExecute(String str) {
생략...
StringBuffer sb = new StringBuffer();
try {
JSONObject root = new JSONObject(str);
JSONArray ja = root.getJSONArray("results");
waitingListItem.clear();
for (int i = 0; i < ja.length(); i++) {
생략...
}
}
} catch (JSONException e) {
e.printStackTrace();
}
adapter = new ListViewAdapter(getActivity(), R.layout.item_list, waitingListItem);
waitingList.setAdapter(adapter);
}
}
}
}
public class ListViewAdapter extends BaseAdapter {
private ArrayList<WaitingListItem> listViewItemList = new ArrayList<WaitingListItem>() ;
private int mResource;
private Context mContext;
public ListViewAdapter(Context context, int layoutResource, ArrayList<WaitingListItem> listItem) {
생략...
}
@Override
public int getCount() {
return listViewItemList.size() ;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final int pos = position;
final Context context = parent.getContext();
// "listview_item" Layout을 inflate하여 convertView 참조 획득.
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.item_list, parent, false);
}
TextView waitingnum = (TextView) convertView.findViewById(R.id.waitingnum) ;
TextView cinfo = (TextView) convertView.findViewById(R.id.cinfo) ;
TextView issuingtime = (TextView) convertView.findViewById(R.id.issuingtime) ;
Button call = (Button) convertView.findViewById(R.id.call);
생략...
}
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
at com.example.kcwoo326.cutomerscareapp.MainActivity$WaitingLayout$PWaitingTableDown.onPostExecute(MainActivity.java:204)
at com.example.kcwoo326.cutomerscareapp.MainActivity$WaitingLayout$PWaitingTableDown.onPostExecute(MainActivity.java:106)