ArrayAdapter和listview错误

时间:2016-06-23 18:43:25

标签: java android listview android-arrayadapter

我尝试在以下代码中设置适用于列表视图的设备。

public class MainActivity extends AppCompatActivity {

    JSONArray jsonObject;
    ArrayList<String> arrayList= new ArrayList<String>();
    static ArrayList<String> articles= new ArrayList<String>();
    static ArrayAdapter<String> arrayAdapter;
    public class Dwnl extends AsyncTask<String,Void,String> {

        @Override
        protected String doInBackground(String... strings) {
            try {
                URL url = new URL(strings[0]);

                URLConnection conn=null;
                conn = (HttpURLConnection)url.openConnection();
                String contents="";

                InputStream in = conn.getInputStream();
                InputStreamReader reader = new InputStreamReader(in);
                int data =reader.read();
                int counter = 0;
                while (data!=-1) {    
                    contents+=(char)data;
                    data=reader.read();
                    //ounter++;
                }
                //contents = in.toString();
                jsonObject= new JSONArray(contents);
                //Log.i("Sire",String.valueOf(jsonObject.length()));
                arrayList = new ArrayList<>();
                //arrayList.addAll((Collection<? extends String>) jsonObject);
                for(int i = 0 ; i < 3 ; i++) {

                    try {
                        //Log.i("URL", "https://hacker-news.firebaseio.com/v0/item/" + jsonObject.get(i) + ".json?print=pretty");

                        String site = "";
                        site = "https://hacker-news.firebaseio.com/v0/item/" + jsonObject.get(i) + ".json?print=pretty";
                        URL Second = new URL(site);
                        URLConnection newURlCon = (HttpURLConnection) Second.openConnection();
                        InputStream input = newURlCon.getInputStream();
                        InputStreamReader secondreader = new InputStreamReader(input);
                        int pos = secondreader.read();
                        String all = "";
                        while (pos != -1) {   
                            all += (char) pos;
                            pos = secondreader.read();
                        }
                        //Log.i("JSON",all);
                        JSONObject second = new JSONObject(all);
                        all = "";

                        articles.add(second.getString("title").toString());
                        Log.i("JSONSTR",articles.get(i));

                        //arrayAdapter.notifyDataSetChanged();
                    }
                    catch (Exception e) {
                        StringWriter sw = new StringWriter();
                        PrintWriter pw = new PrintWriter(sw);
                        e.printStackTrace(pw);
                        Log.i("Exp",sw.toString());
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }

            return null;
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Dwnl dwnl = new Dwnl();
        try {

            dwnl.execute("https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty").get();
            ListView listView = (ListView) findViewById(R.id.listView1);
            arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,articles);
            listView.setAdapter(arrayAdapter);
        }
        catch (Exception e) {
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);
            e.printStackTrace(pw);
            Log.i("Exp",sw.toString());
        }   
    }
}

但始终显示此错误

  

java.lang.NullPointerException:尝试在空对象引用上调用虚方法'void android.widget.ListView.setAdapter(android.widget.ListAdapter)'

我不知道什么是null ther arraylist的大小为3并且根本没有空的

提前致谢

2 个答案:

答案 0 :(得分:0)

ListView抛出NullPointerException,而不是数组抛出 在onCreate方法中,您应该致电:

setContentView(R.layout.your_layout);

your_layout替换为MainActivity xml。

答案 1 :(得分:0)

Null是因为你从.doInBackground()返回null。您无法从后台线程将数据设置为适配器,它将引发另一个异常。您必须从.doInBackground返回结果,然后在.onPostExecute()

中处理它