使用CustomAdapter的ListView的NullPointerException
包含CustomAdapter文件...使用CustomAdapter的ListView的NullPointerException
1.Initializing ArrayList。
2.初始化ListView。
从URL 3.Grapping数据和在ArrayList的
4.设置的ListView与CustomAdapter存储
5,请检查CustomAdapter代码在MainActivity下面..
public class Screen2 extends AppCompatActivity {
ProgressDialog pDialog;
ArrayList<Information> record_list;
ListView list_view;
CustomAdapter listAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.screen2);
record_list=new ArrayList<Information>();
list_view=(ListView) findViewById(R.id.list_view);
new Test().execute();
}
public class Test extends AsyncTask<String, Void, ArrayList<Information>> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(Screen2.this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected ArrayList<Information> doInBackground(String... params) {
String jsonStr = makeServiceCall();
try {
JSONArray jsonArray=new JSONArray(jsonStr);
for(int i=0;i<jsonArray.length();i++){
JSONObject jsonObject=jsonArray.getJSONObject(i);
String id=jsonObject.getString("id");
String name=jsonObject.getString("label");
String email=jsonObject.getString("email");
Information information=new Information(id,name,email);
record_list.add(information);
return record_list;
}
System.out.println(jsonStr);
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(ArrayList<Information> s) {
super.onPostExecute(s);
// Dismiss the progress dialog
//listAdapter=new CustomAdapter(Screen2.this,record_list);
listAdapter=new CustomAdapter(Screen2.this,record_list);
list_view.setAdapter(listAdapter);
if (pDialog.isShowing())
pDialog.dismiss();
/**
* Updating parsed JSON data into ListView
* */
}
public String makeServiceCall(){
String response = null;
try {
URL url = new URL("http://192.168.1.109:9000/tasks2");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
// read the response
InputStream in = new BufferedInputStream(conn.getInputStream());
response = convertStreamToString(in);
} catch (MalformedURLException e) {
System.out.println("MalformedURLException: " + e.getMessage());
} catch (ProtocolException e) {
System.out.println("MalformedURLException: " + e.getMessage());
} catch (IOException e) {
System.out.println("MalformedURLException: " + e.getMessage());
} catch (Exception e) {
System.out.println("MalformedURLException: " + e.getMessage());
}
return response;
}
private String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line;
try {
while ((line = reader.readLine()) != null) {
sb.append(line).append('\n');
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println(sb);
return sb.toString();
}
}
}
CustomAdapter .java :(这里是我的CustomAdapter文件) 我在这个文件中也看不到任何错误...
public class CustomAdapter extends ArrayAdapter<Information> {
public CustomAdapter(Context c, ArrayList<Information> record) {
super(c, R.layout.custom_row, record);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Get the data item for this position
Information information = getItem(position);
//LayoutInflater inflater=LayoutInflater.from(getContext());
// Check if an existing view is being reused, otherwise inflate the view
convertView = LayoutInflater.from(getContext()).inflate(R.layout.custom_row, parent, false);
// Lookup view for data population
TextView record_id = (TextView) convertView.findViewById(R.id.record_id);
TextView record_name = (TextView) convertView.findViewById(R.id.record_name);
TextView record_email = (TextView) convertView.findViewById(R.id.record_email);
// Populate the data into the template view using the data object
record_id.setText(information.id);
record_name.setText(information.name);
record_email.setText(information.email);
return convertView;
}
}
有逻辑错误代码:
-
的
for
环路具有return
声明里面,而你不得不重复这样一个良好的设计做这个定义Arraylist
另一个变量让说s
和代码会是这样的:@Override protected ArrayList<Information> doInBackground(String... params) { String jsonStr = makeServiceCall(); ArrayList<Information> s = new ArrayList<Information>(); try { JSONArray jsonArray=new JSONArray(jsonStr); for(int i=0;i<jsonArray.length();i++){ JSONObject jsonObject=jsonArray.getJSONObject(i); String id=jsonObject.getString("id"); String name=jsonObject.getString("label"); String email=jsonObject.getString("email"); Information information=new Information(id,name,email); s.add(information); } System.out.println(jsonStr); return s; } catch (JSONException e) { e.printStackTrace(); } return null; }
-
然后在你的化妆
onPostExecute
是record_list
s
这样的:@Override protected void onPostExecute(ArrayList<Information> s) { super.onPostExecute(s); // Dismiss the progress dialog //listAdapter=new CustomAdapter(Screen2.this,record_list); record_list = s; listAdapter=new CustomAdapter(Screen2.this,record_list); list_view.setAdapter(listAdapter); if (pDialog.isShowing()) pDialog.dismiss(); /** * Updating parsed JSON data into ListView * */ }
尝试改为上面,仍然有相同的例外。 –
日志哪一行说有问题?以蓝色出现的线条! – Xenolion
list_view.setAdapter(listAdapter); @ onPostExecute。 –
添加您的json响应与您的问题。 –
提取的JSON响应:I/System.out:id:2name:[email protected] I/System.out:id:3name:[email protected] I/System.out:id:5name :[email protected] I/System.out:id:9name:[email protected] I/System.out:id:17name:[email protected] I/System.out :id:19name:[email protected] –
Guy's非常感谢您的时间......,这与布局有点混乱,忘记更改我的Screen Size Layout的ListView ID。 –