2017-12-18 106 views
0

包含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; 
     } 
} 
+0

添加您的json响应与您的问题。 –

+0

提取的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] –

+0

Guy's非常感谢您的时间......,这与布局有点混乱,忘记更改我的Screen Size Layout的ListView ID。 –

回答

0

有逻辑错误代码:

  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 
        * */ 
    } 
    
+0

尝试改为上面,仍然有相同的例外。 –

+0

日志哪一行说有问题?以蓝色出现的线条! – Xenolion

+0

list_view.setAdapter(listAdapter); @ onPostExecute。 –

相关问题