Android 具有空指针异常的回收器查看器线性布局管理器

Android 具有空指针异常的回收器查看器线性布局管理器,android,android-recyclerview,Android,Android Recyclerview,虽然这个问题在这个论坛上已经被问过好几次了。我读过,但至少没有一本对我有用。我把它绑了将近2天,但我不知道如何初始化线性布局和逃避NPE。我没有使用任何片段,希望在活动中初始化布局管理器 下面是我代码的重要部分,其余的代码都是关于适配器和xml的,所以不要写在这里。。。。但如果需要,我也会提供 public class MainNews extends AppCompatActivity { public RecyclerViewAdapter recyclerViewAdapter;

虽然这个问题在这个论坛上已经被问过好几次了。我读过,但至少没有一本对我有用。我把它绑了将近2天,但我不知道如何初始化线性布局和逃避NPE。我没有使用任何片段,希望在活动中初始化布局管理器

下面是我代码的重要部分,其余的代码都是关于适配器和xml的,所以不要写在这里。。。。但如果需要,我也会提供

public class MainNews extends AppCompatActivity {

    public RecyclerViewAdapter recyclerViewAdapter;
    Toolbar toolbar;
    private String[] inputStream;
    public RecyclerView recyclerView;
    //ArrayList<Data> dataList;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_news);
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        String newsMain = "http://microblogging.wingnity.com/JSONParsingTutorial/jsonActors";
        new JSONAsync(getApplicationContext()).execute(newsMain);

        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        RecyclerViewAdapter recyclerViewAdapter = new RecyclerViewAdapter(this, JSONAsync.dataArray);
        recyclerView.setAdapter(recyclerViewAdapter);
        recyclerView.setItemAnimator(new DefaultItemAnimator());


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        return super.onOptionsItemSelected(item);
    }

    /////////////////////////////////////////////////////


    public static class JSONAsync extends AsyncTask<String, String, Boolean> {

        Context context;
        public static List<Data> dataArray;

        public JSONAsync(Context context) {
            this.context = context;
        }

        @Override
        protected Boolean doInBackground(String... params) {
            try {
                return downloadUrl(params[0]);
            } catch (IOException e) {
                return false;
            } catch (JSONException e) {
                e.printStackTrace();
            }

            return null;
        }

       public boolean downloadUrl(String myurl) throws IOException,JSONException {
            InputStream is = null;
            int response;

            try {
                URL url = new URL(myurl);
                HttpURLConnection conn = (HttpURLConnection)url.openConnection();
                conn.setRequestMethod("GET");
                conn.setDoInput(true);
                // Starts the query
                conn.connect();
                response = conn.getResponseCode();
                is = conn.getInputStream();
                if (response == 200) {
                    String responseBody = convertStreamToString(conn.getInputStream());
                    JSONArray jArray = new JSONArray(responseBody);
                    //  JSONArray jArray = new JSONArray(is);
                    for (int i = 0; i < jArray.length(); i++) {
                        JSONObject jobj = jArray.getJSONObject(i);
                        Data data = new Data();
                        data.setId(jobj.getInt("id"));
                        data.setHeading(jobj.getString("heading"));
                        data.setBrief(jobj.getString("brief"));
                        data.setDate(jobj.getString("date"));
                        dataArray.add(data);
                    }
                    return true;
                } else return false;

            } finally {
                if (is != null) {
                    is.close();
                }
            }

        }

        public String convertStreamToString(InputStream is) {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            StringBuilder sb = new StringBuilder();
            String line = null;
            try {
                while ((line = reader.readLine()) != null) {
                    sb.append(line).append("\n");
                }
            } catch (IOException e) {
            } finally {
                try {
                    is.close();
                } catch (IOException e) {
                }
            }

            return sb.toString();
        }

        @Override
        protected void onPostExecute(Boolean result) {

            if (result == true) {
                Toast.makeText(context, "Data Fetched, now do some work with it AH", Toast.LENGTH_LONG).show();
            } else
                Toast.makeText(context, "Unable to fetch data from server", Toast.LENGTH_LONG).show();

        }
       }
       }
附言:我已经将JSONAsync类设置为静态/非静态,并且其他的东西都做了更改,但没有任何效果


非常感谢您的帮助。

dataArray未初始化。换成

public static List<Data> dataArray = new Arraylist();
publicstaticlist dataArray=newarraylist();

数据数组未初始化。换成

public static List<Data> dataArray = new Arraylist();
publicstaticlist dataArray=newarraylist();

您试图添加的数组列表从未初始化。在添加任何值之前,必须先初始化它

试试这个

public static List<Data> dataArray = new Arraylist();
publicstaticlist dataArray=newarraylist();
或者你也可以按照下面的方法来做

List<Data> dataArray;

public boolean downloadUrl(String myurl) throws IOException,JSONException {
    InputStream is = null;
    int response;
    dataArray = new List<Data>();

    try {
        URL url = new URL(myurl);
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        conn.setRequestMethod("GET");
        conn.setDoInput(true);
        // Starts the query
        conn.connect();
        response = conn.getResponseCode();
        is = conn.getInputStream();
        if (response == 200) {
            String responseBody = convertStreamToString(conn.getInputStream());
            JSONArray jArray = new JSONArray(responseBody);
            //  JSONArray jArray = new JSONArray(is);
            for (int i = 0; i < jArray.length(); i++) {
                JSONObject jobj = jArray.getJSONObject(i);
                Data data = new Data();
                data.setId(jobj.getInt("id"));
                data.setHeading(jobj.getString("heading"));
                data.setBrief(jobj.getString("brief"));
                data.setDate(jobj.getString("date"));
                dataArray.add(data);
            }
            return true;
        } else return false;

    } finally {
        if (is != null) {
            is.close();
        }
    }
列表数据数组;
公共布尔下载URL(字符串myurl)引发IOException、JSONException{
InputStream=null;
int响应;
dataArray=新列表();
试一试{
URL=新URL(myurl);
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.setRequestMethod(“GET”);
conn.setDoInput(真);
//启动查询
连接();
response=conn.getResponseCode();
is=conn.getInputStream();
如果(响应==200){
String ResponseBy=convertStreamToString(conn.getInputStream());
JSONArray jArray=新的JSONArray(responseBody);
//JSONArray jArray=新JSONArray(is);
for(int i=0;i
您试图添加的数组列表从未初始化。在添加任何值之前,必须先初始化它

试试这个

public static List<Data> dataArray = new Arraylist();
publicstaticlist dataArray=newarraylist();
或者你也可以按照下面的方法来做

List<Data> dataArray;

public boolean downloadUrl(String myurl) throws IOException,JSONException {
    InputStream is = null;
    int response;
    dataArray = new List<Data>();

    try {
        URL url = new URL(myurl);
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        conn.setRequestMethod("GET");
        conn.setDoInput(true);
        // Starts the query
        conn.connect();
        response = conn.getResponseCode();
        is = conn.getInputStream();
        if (response == 200) {
            String responseBody = convertStreamToString(conn.getInputStream());
            JSONArray jArray = new JSONArray(responseBody);
            //  JSONArray jArray = new JSONArray(is);
            for (int i = 0; i < jArray.length(); i++) {
                JSONObject jobj = jArray.getJSONObject(i);
                Data data = new Data();
                data.setId(jobj.getInt("id"));
                data.setHeading(jobj.getString("heading"));
                data.setBrief(jobj.getString("brief"));
                data.setDate(jobj.getString("date"));
                dataArray.add(data);
            }
            return true;
        } else return false;

    } finally {
        if (is != null) {
            is.close();
        }
    }
列表数据数组;
公共布尔下载URL(字符串myurl)引发IOException、JSONException{
InputStream=null;
int响应;
dataArray=新列表();
试一试{
URL=新URL(myurl);
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.setRequestMethod(“GET”);
conn.setDoInput(真);
//启动查询
连接();
response=conn.getResponseCode();
is=conn.getInputStream();
如果(响应==200){
String ResponseBy=convertStreamToString(conn.getInputStream());
JSONArray jArray=新的JSONArray(responseBody);
//JSONArray jArray=新JSONArray(is);
for(int i=0;i
你能发布你的日志吗?你能发布你的日志吗?嗯,u r genius:D…我不知道我应该用什么词!因为XML没有像我想的那样完全膨胀,但你的解决方案消除了障碍。谢谢。嗯,u r genius:D…我不知道我应该用什么词!因为XML没有像我想的那样完全膨胀我想要,但你的解决方案还是消除了障碍。谢谢。