使用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
* */
}
以上是 使用CustomAdapter的ListView的NullPointerException 的全部内容, 来源链接: utcz.com/qa/260455.html