2015-06-20 3 views
0

Я читал данные из базы данных и сохранялся в списке массивов, а затем в listview. Но когда я добавлю список, он покажет сообщение об ошибке, как показано ниже в logcat. У меня уже есть данные в списке массивов. Но посмотрите, как система присваивает список массива в listview до или во время соединения/выполнения sql. Таким образом, данные могут еще не присваивать список массива, но система уже выполняет следующий элемент, потому что, когда я удаляю оператор listview, он может работать. Почему так. Я новичок в Android.Android назначает данные listview

Ошибка: Вызванный: java.lang.IndexOutOfBoundsException: Недопустимый индекс 0, размер 0

Код:

private ListView listView1; 
private ArrayList<String> arrData = new ArrayList<String>(); 
private Campaign campaign_data[] = new Campaign[]{}; 
private Integer intData=0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_act_performace); 

    //connect to db and get data 
    ConnectTask dt = new ConnectTask(); 
    dt.execute(); 

    //display data in listview 
    camp mydata[] = new camp [] 
      { 
      new camp (R.drawable.empty, "Today:"+ arrData.get(0)), 
      new camp (R.drawable.empty, "This Month:"+ arrData.get(1)) 
      }; 

    CampAdapter adapter = new CampAdapter (this,R.layout.listview_header_row, mydata); 
    listView1 = (ListView) findViewById(R.id.listView1); 
    listView1.setAdapter(adapter); 
} 
class ConnectTask extends AsyncTask<Integer, Integer, String> 
{ 
    Connection con = null; 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected String doInBackground(Integer... params) { 
     try { 
      Class.forName("net.sourceforge.jtds.jdbc.Driver"); 
      con = DriverManager.getConnection("jdbc:jtds:sqlserver://192.168.1.2/test;instance=SQLEXPRESS;user=inc;password=123456789"); 
      testConnection(con); 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
    } 
public void testConnection(Connection con) throws java.sql.SQLException { 
     try { 
      String sql = "SELECT colA FROM test"; 
      Statement stmt = con.createStatement(); 
      ResultSet rs = stmt.executeQuery(sql); 

      while (rs.next()) { 
       arrData.add(rs.getString("colA").toString()); 
       intData=intData+1; 
      } 

}

ответ

0

Переместить ниже кода из OnCreate() для Метод onPostExecute() ConnectTask.

CampAdapter adapter = new CampAdapter (<your activity context> ,R.layout.listview_header_row, mydata); 
    listView1.setAdapter(adapter); 
+0

Когда я перехожу к onPostExecute, выдается ошибка. Ошибка: это, R.layout.listview_header_row, campaign_data не может применяться к ожидаемому фактическому ... – ckcheah