java - fragment 中的 setListAdaptor 错误

标签 java android android-fragments nullpointerexception android-listfragment

我有这个 fragment 叫做 HomeFragment.java

代码如下:-

public class HomeFragment extends Fragment {

    public HomeFragment(){}

    String username, id;
    ListView t1;
    int idno;
    JSONArray jsonArray;

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

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


        Intent intent = getActivity().getIntent();
        t1 = (ListView) getActivity().findViewById(R.id.getInfo);
       if(intent.getStringExtra("username") == null)
       {
           Intent intent1 = new Intent(getActivity(),LoginActivity.class);
           startActivity(intent1);
       }
       else
       {
        username =  intent.getStringExtra("username");
        id = intent.getStringExtra("id");
        idno = Integer.parseInt(id);

        new getDetails().execute(new ApiConnector());


       }



        return rootView; 



    }


    public void setListAdaptor(JSONArray jsonArray)
    {
        this.jsonArray = jsonArray;
        t1.setAdapter(new GetAllInfoListView(jsonArray,getActivity()));

    }

    private class getDetails extends AsyncTask<ApiConnector,Long,JSONArray> {

        @Override
        protected JSONArray doInBackground(ApiConnector... params) {
            return params[0].getDetails(idno);

        }

        @Override
        protected void onPostExecute(JSONArray jsonArray) {
            // TODO Auto-generated method stub
            //setListAdaptor(jsonArray);

        }


    }


}

没有编译错误。 但是当我运行它时,我在 --> t1.setAdapter(new GetAllInfoListView(jsonArray,getActivity()));

得到一个 NullPointerException

这是我的列表适配器类:-

public class GetAllInfoListView extends BaseAdapter {

    private JSONArray dataArray;
    private Activity activity;
    private static LayoutInflater inflator = null;

    public GetAllInfoListView(JSONArray jsonArray, Activity a)
    {
        this.dataArray = jsonArray;
        this.activity = a;

        inflator = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return dataArray.length();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

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

        ListCell cell;
        if(convertView == null)
        {
            convertView = inflator.inflate(R.layout.cell_layout, null);
            cell = new ListCell();

            cell.name =  (TextView) convertView.findViewById(R.id.txt_name);
            cell.age =  (TextView) convertView.findViewById(R.id.txt_age);
            cell.city =  (TextView) convertView.findViewById(R.id.txt_city);
            cell.airline = (ImageView) convertView.findViewById(R.id.airline_pick);
            cell.dep_time = (TextView) convertView.findViewById(R.id.dep_time);
            convertView.setTag(cell);
        }
        else
        {
            cell = (ListCell) convertView.getTag();
        }

        try {
            JSONObject jsonObject = this.dataArray.getJSONObject(position);

            cell.name.setText(jsonObject.getString("BKTBOARDCITY")+" - "+jsonObject.getString("BKTOFFCITY"));
            cell.age.setText(jsonObject.getString("BKTAIRLINE"));
            cell.city.setText(jsonObject.getString("BKTDEPDATE").substring(11));
            cell.dep_time.setText(jsonObject.getString("BKTDEPDATE").substring(0,11));
            String image = jsonObject.getString("BKTAIRLINE");
            if(image.equals("Air India"))
            {
                cell.airline.setImageResource(R.drawable.airindia);
            }
            if(image.equals("Air Costa"))
            {
                cell.airline.setImageResource(R.drawable.aircosta);
            }
            if(image.equals("Go Airways"))
            {
                cell.airline.setImageResource(R.drawable.goairways);
            }
            if(image.equals("Indian Airlines"))
            {
                cell.airline.setImageResource(R.drawable.indianairline);
            }
            if(image.equals("Indigo"))
            {
                cell.airline.setImageResource(R.drawable.indigo);
            }

            if(image.equals("Jet Airways"))
            {
                cell.airline.setImageResource(R.drawable.jetairways);
            }
            if(image.equals("Jet Lite"))
            {
                cell.airline.setImageResource(R.drawable.jetlite);
            }
            if(image.equals("Kingfisher Airlines"))
            {
                cell.airline.setImageResource(R.drawable.kingfisher);
            }
            if(image.equals("Paramount Airways"))
            {
                cell.airline.setImageResource(R.drawable.paramount);
            }
            if(image.equals("Spice Jet"))
            {
                cell.airline.setImageResource(R.drawable.spicejet);
            }
            if(image.equals("United Airlines"))
            {
                cell.airline.setImageResource(R.drawable.unitedairlines);
            }



        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return convertView;
    }

    private class ListCell
    {
        private TextView name;
        private TextView age;
        private TextView city;
        private ImageView airline;
        private TextView dep_time;
    }

}

请帮忙。谢谢:D

最佳答案

我认为这是错误的

t1 = (ListView) getActivity().findViewById(R.id.getInfo);

像这样使用

t1 = (ListView) rootView.findViewById(R.id.getInfo);

关于java - fragment 中的 setListAdaptor 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23695243/

相关文章:

java - 这里需要 volatile 吗?

java - ActiveMQ 未收到来自生产者的消息

java - setonclicklistener 在回收站 View 中每隔 4 个位置产生一次效果

javascript - 在 webview 中执行 JavaScript

java - FragmentManager 知道 fragment 何时恢复

java - 我们如何检查文件是否已提交到 SVN 存储库?

java - 使用 ANT 通过 SCP 将文件复制到禁用 root 的 Ubuntu 服务器(需要 SUDO)

android opengl es 2.0 纹理切换

android - Kotlin - 创建连续的 fragment 将数据添加到错误的容器中

java - GPS 应用程序可以在模拟器上运行,但不能在我的手机上运行