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