使用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;

}

}

回答:

有逻辑错误代码:

  1. 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;

    }

  2. 然后在你的化妆onPostExecuterecord_lists这样的:

    @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

回到顶部