Php 如何从SQL数据库中选择所有记录并将其放入Listview Android中

Php 如何从SQL数据库中选择所有记录并将其放入Listview Android中,php,android,mysql,database,listview,Php,Android,Mysql,Database,Listview,我试图学习如何为android应用程序存储和获取数据库中的记录,我可以进行更新、插入、删除等操作。但我在获取多个记录时遇到问题,我想问一下如何从localhost phpmyadmin中的表中获取所有记录,并使用共享首选项将结果导出到android应用程序中的listview中,以下是我的php函数代码: public function getLessons($teacher) { $sql = 'SELECT * FROM lessons WHERE teacher = :teacher'

我试图学习如何为android应用程序存储和获取数据库中的记录,我可以进行更新、插入、删除等操作。但我在获取多个记录时遇到问题,我想问一下如何从localhost phpmyadmin中的表中获取所有记录,并使用共享首选项将结果导出到android应用程序中的listview中,以下是我的php函数代码:

 public function getLessons($teacher) {

$sql = 'SELECT * FROM lessons WHERE teacher = :teacher';
$query = $this -> conn -> prepare($sql);
$query -> execute(array(':teacher' => $teacher));
$data = $query -> fetchObject();

$lesson["title"] = $data -> title; // im not sure if this is true
$lesson["maxstudent"] = $data -> maxstudent; // im not sure if this is true       
$lesson["about"] = $data -> about; // im not sure if this is true
return $lesson;// the result of sql query will be more than one record 
}
上面的代码将检索查询结果,但我不确定代码,如果结果是多条记录,那么第一课的结果是什么?这是一个字符串数组吗?下面是我的java方法,以获取数据库代码中的所有课程:

        private void getLessonProcess(String teacher){

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Constants.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        RequestInterface requestInterface = retrofit.create(RequestInterface.class);

        Lesson lesson = new Lesson();// its Java Class containing title,maxstudent and about
        lesson.setTeacher(teacher);// we set the teacher, so only specific teacher's lesson will be given as a result
        ServerRequest request = new ServerRequest();// server request is a class to connect to localhost
        request.setOperation(Constants.LESSONS);// constants.LESSONS is 'getlessons' the key that i use to trigger the SQL Query above
        request.setLesson(lesson);
        Call<ServerResponse> response = requestInterface.operation(request);

        response.enqueue(new Callback<ServerResponse>() {
            @Override
            public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) {

                ServerResponse resp = response.body();
                Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show();


                  if(resp.getResult().equals(Constants.SUCCESS)){
                        SharedPreferences.Editor editor = pref.edit();
                        editor.putString(Constants.LESSONS,resp.getLesson().getLessontitle());
                        editor.putString(???,resp.getLesson().getMaxstudent());
                        editor.putString(???,resp.getLesson().getAbout());
                        ?????????? // What should i write here?
                        //in code above it will only put one record of the database and put it in shared preference 
                        editor.apply();
                    }
                }

                @Override
                public void onFailure(Call<ServerResponse> call, Throwable t) {

                    Log.d(Constants.TAG,"failed");
                    Snackbar.make(getView(), t.getLocalizedMessage(), Snackbar.LENGTH_LONG).show();                 

            }
        });
    }       
private void getLessonProcess(字符串教师){
改装改装=新改装.Builder()
.baseUrl(常量.BASE\u URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
RequestInterface RequestInterface=reformation.create(RequestInterface.class);
lessource=new lessource();//它的Java类包含title、maxstudent和about
lesson.settacher(teacher);//我们设置了教师,因此只会给出特定教师的课程
ServerRequest=new ServerRequest();//server request是要连接到本地主机的类
request.setOperation(Constants.LESSONS);//Constants.LESSONS是我用来触发上面SQL查询的“getlessons”键
请求。设置课程(课程);
调用响应=请求接口.操作(请求);
response.enqueue(新回调(){
@凌驾
公共void onResponse(呼叫,改装2.响应){
ServerResponse resp=response.body();
Snackbar.make(getView(),resp.getMessage(),Snackbar.LENGTH\u LONG.show();
if(resp.getResult().equals(Constants.SUCCESS)){
SharedReferences.Editor=pref.edit();
putString(Constants.LESSONS,resp.getLesson().getLessontitle());
编辑器.putString(???,分别为GetLessource().getMaxstudent());
编辑器.putString(???,分别为getLesson().getAbout());
//我应该在这里写什么?
//在上面的代码中,它只会将数据库的一条记录放在共享首选项中
editor.apply();
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.d(Constants.TAG,“failed”);
make(getView(),t.getLocalizedMessage(),Snackbar.LENGTH_LONG).show();
}
});
}       
是否可以遍历所有数据并将其放入arraylist中,以便使用适配器在ListView中显示结果?多谢各位

@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub


    db.execSQL("CREATE TABLE " + TABLE_NAME
            + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, " + key_msg + " STRING, " + key_isread + " STRING)");


}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
    onCreate(db);
}
//*************************-------插入GCM消息---------**************************//

public void insert_GCM_receive_data(String msg) {

    String value;
    SQLiteDatabase db = getWritableDatabase();

    ContentValues cv = new ContentValues();

    cv.put(key_msg, msg);
    cv.put(key_isread, "N");

    value = cv.toString();

    db.insert(TABLE_NAME, null, cv);
    System.out.println("/n******this is temp table name  " + TABLE_NAME + "\nthis is temp msg  " + cv + "\nmsg" + msg + "\nval" + value);

    db.close();

}
//-----------------------------------------------------------------------------------//

//**********************----------获取警报数据------------**************************// 公共阵列列表获取警报消息(){

ArrayList name=new ArrayList();
试一试{
SQLiteDatabase db=getWritableDatabase();
光标c=null;
c=db.rawQuery(“选择*自”+表名称,空);
系统输出打印ln(c);
for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){
String str_id=c.getString(0);
String str_msg=c.getString(1);
String str_read=c.getString(2);
Log.e(“值”,str_id+str_msg+str_read);
HashMap hm=新的HashMap();
hm.put(“味精”,str_味精);
hm.put(“isread”,str_read);
名称。添加(str_msg);
}
c、 close();
db.close();
}捕获(例外e){
Log.e(“这不起作用,”+e);
}
返回名称;
}`
//调用类方法

dbHelper=接收到的数据的新数据库(this.getActivity()); name=newarraylist(dbHelper.get_alert_msg())

使用类似“从表名称中选择*”的查询。。。。然后在数据库类中扩展SQLiteopenhelper


它来自于使用数据存储、获取和操作目的

如果您的数据存储在数据库服务器(Mysql、oracle等)中,则必须首先用Php编写web服务。该特定服务将从数据库中提取所有数据。然后,您必须编写一个web逻辑,将提取的数据转换为xml或json,因为只有这些格式的数据才能在网络中传输。如果您有多个数据,那么还可以从该数据生成json数组。 当android客户端通过改造调用您的web服务时,它将在相同的响应中自动获取json。json可以解析为java的ArrayList类。现在,您可以按照将列表数据填充到ListView的基本步骤,在ListView中显示所有数据

    ArrayList<String> name = new ArrayList<String>();
    try {
        SQLiteDatabase db = getWritableDatabase();
        Cursor c = null;
        c = db.rawQuery("SELECT  * FROM " + TABLE_NAME, null);

        System.out.println(c);

        for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {

            String str_id = c.getString(0);
            String str_msg = c.getString(1);
            String str_read = c.getString(2);
            Log.e("value", str_id + str_msg + str_read);

            HashMap<String, String> hm = new HashMap<String, String>();
            hm.put("msg", str_msg);
            hm.put("isread", str_read);


            name.add(str_msg);


        }
        c.close();
        db.close();

    } catch (Exception e) {
        Log.e("this not work", "" + e);
    }

    return name;
}`