【问题标题】:Get Data from SQL Database and set it to ListView in Android从 SQL 数据库中获取数据并将其设置为 Android 中的 ListView
【发布时间】:2014-06-04 20:14:12
【问题描述】:

我想从 SQL Server 获取数据并将其设置为列表。

1.我当前的活动中已有数据。 _I printed it on Logcat_ .

2。现在我想将该数据设置到我的列表中。

基本上我已经为基本视图获取了一个静态数据列表,我在那里提到了

如何将该数据设置为列表?

这是我的代码,它将显示我如何编写代码的内容:

public class menus extends Activity {

ListView list;
ArrayAdapter<String> adapter = null;
Editor edit1;
SharedPreferences pref;
SharedPreferences.Editor editor;

int i = 0,count = 0;
String[] listOfMenus;
String listdetails;
Connection xyz;
Statement st;
ResultSet rs;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.select_item);

    list=(ListView)findViewById(R.id.menulistblank);

    editor = getPreferences(MODE_PRIVATE).edit();

     /////// This is my Static data that I stored in list.

    String[] values = new String[]{"Adroid Developer",".Net Developer","Java Developer","BA"};

        adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, android.R.id.text1, values);

         list.setAdapter(adapter); 

                // Object of connection for getting content.
         xyz = MainActivity.conn;

         MyNetworkTask myWebFetch = new MyNetworkTask();
         myWebFetch.execute();

         list.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                // TODO Auto-generated method stub
                Toast.makeText(getBaseContext(), "You click "+arg2, Toast.LENGTH_SHORT).show();
            }
        });
}

   //////// ASYNC TASK ////////

private class MyNetworkTask extends AsyncTask<Void, Void, Void> {

     protected void onProgressUpdate(Integer... progress) {
         Log.w("Process completed", "In XXXXXXXX");
     }

     protected void onPostExecute(Long result) {
          Log.w("Process completed", "aaaaaaaaaa");
     }

    @Override
    protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub
        Log.w("Process completed", "In doInBackground..");
        try {
            st = MainActivity.conn.createStatement();
            rs = st.executeQuery("SELECT * FROM lalit_db;");
            while(rs.next()){

                  // ***** It prints my required data  in Logcat
                Log.w(rs.getString(2), rs.getString(3));
                }

            Thread.sleep(5000);

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return null;
    }
 }
}// Main Program Ends..

请告诉我该怎么办

将logcatLog.w(rs.getString(2), rs.getString(3));的这个数据设置在List中。

【问题讨论】:

标签: android sql listview editor android-arrayadapter


【解决方案1】:
  1. 在获取数据时在值中添加字符串

    st = MainActivity.conn.createStatement();
    rs = st.executeQuery("SELECT * FROM lalit_db;");
    values=new String[st.getFetchSize()]; //total number of rows
    int index=0;
    while(rs.next()){
      values[index]=rs.getString(2);
      index++;
     // ***** It prints my required data  in Logcat
     Log.w(rs.getString(2), rs.getString(3));
    }
    
  2. 在 onPostExecute() 中显示

    protected void onPostExecute(Void result) {
      Log.w("Process completed", "aaaaaaaaaa");
      adapter = new ArrayAdapter<String>(menus.this,android.R.layout.simple_list_item_1, android.R.id.text1, values);
    
       list.setAdapter(adapter); 
    }
    

编辑

在 onPostExecute() 方法中添加@Override 注解

@Override
protected void onPostExecute(Void result) {
      Log.w("Process completed", "aaaaaaaaaa");
 }

【讨论】:

  • 我已经尝试过了,但它给出了像The constructor ArrayAdapter&lt;String&gt;(menus.MyNetworkTask, int, int, String[]) is undefined@Ketan这样的错误
  • 尝试更新答案。将this 替换为menus.this
  • 是的,先生它的工作(没有给出任何错误)但方法onPostExecute 没有被调用。为什么?看看我的问题。 @Ketan
  • 先生,我已经尝试过了,但它给出了错误The method onPostExecute(Long) of type menus.MyNetworkTask must override or implement a supertype method@Ketan
  • 现在这应该可以工作了。将(Long result)替换为(Void result)
【解决方案2】:

如果你想要多列 ListView ,试试这个:

public void fillList(ResultSet rs,ListView list_head,ListView list,int layout,int to[],String columns[],String titles[]) 
{       
    ArrayList<HashMap<String, String>> mylist, mylist_title;
    ListAdapter adapter_title, adapter;
    HashMap<String, String> map1, map2;

    mylist = new ArrayList<HashMap<String, String>>();
    mylist_title = new ArrayList<HashMap<String, String>>();

    /**********Display the headings************/
    map1 = new HashMap<String, String>();
    for (int i = 0; i < columns.length; i++)  
        map1.put(columns[i], titles[i]);
    mylist_title.add(map1);

    try 
    {
        adapter_title = new SimpleAdapter(context, mylist_title,layout,columns, to);
        list_head.setAdapter(adapter_title);
    } catch (Exception e) {
        Log.w("Error1","" + e.getMessage()); 
        e.printStackTrace();
    }

    /**********Display the contents************/





    try 
    {
    while(rs.next())
    {           
        map2 = new HashMap<String, String>();
        for (int i = 0; i < columns.length; i++)  
            map2.put(columns[i], rs.getObject(columns[i]).toString());
        mylist.add(map2);
    }
} catch (SQLException e1) 
{
    // TODO Auto-generated catch block
    Log.w("Error2","" + e1.getMessage()); 
    e1.printStackTrace();
}



    try 
    {
        adapter = new SimpleAdapter(context, mylist, layout,columns, to);
        list.setAdapter(adapter);
    } 
    catch (Exception e) 
    {
        Log.w("Error3","" + e.getMessage()); 
        e.printStackTrace();

    }

}

【讨论】:

  • 感谢您的友好回复,但我已经解决了这个问题。 :)
猜你喜欢
  • 2015-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多