2017-12-18 128 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。 –

相關問題