Android从php/mysql查询填充微调器

Android从php/mysql查询填充微调器,php,android,mysql,spinner,Php,Android,Mysql,Spinner,我正在使用CustomHttpClient从我的android应用程序进行连接和查询。我想知道是否可以从php/mysql查询中填充微调器,如果可以,将如何完成?是的,这是可能的。使用php/mysql查询检索项目列表,然后使用适配器将这些项目提供给微调器。这个问题提供了一个如何编写SpinnerAdapter的示例:,所以这实际上应该相当容易。在实现细节方面,您并没有给我们太多的工作要做,所以我将尽我所能为您编写半伪代码,并给您一个好的总体答案 我们希望从单独的线程执行查询,以便在等待网络响应

我正在使用CustomHttpClient从我的android应用程序进行连接和查询。我想知道是否可以从php/mysql查询中填充微调器,如果可以,将如何完成?

是的,这是可能的。使用php/mysql查询检索项目列表,然后使用适配器将这些项目提供给微调器。这个问题提供了一个如何编写SpinnerAdapter的示例:

,所以这实际上应该相当容易。在实现细节方面,您并没有给我们太多的工作要做,所以我将尽我所能为您编写半伪代码,并给您一个好的总体答案

我们希望从单独的线程执行查询,以便在等待网络响应时不会阻塞UI线程。您可以通过许多不同的方式来实现这一点,包括使用AsyncTask、IntentService或某种加载程序。我认为在您的情况下,从AsyncTaskLoader类派生的自定义类将是最好的。因此,让我们看看这会是什么样子(注意,您需要访问一些较新的api才能使用加载器,如果您正在为低于api级别11的任何内容编写此应用程序,请签出)

MyActivity扩展活动实现LoaderManager.LoaderCallbacks{
专用适配器;
私有静态最终整数微调器\加载程序\ ID=0;
创建公共空间(捆绑冰柱){
微调器旋转器=findViewById(R.id.the_微调器);
spinneradapter=新适配器(…);//创建空适配器
spinneradapter.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
旋转装置适配器(旋转装置适配器);
getLoaderManager().initLoader(SPINNER\u LOADER\u ID,null,this);
}
公共加载器onCreateLoader(int-id,Bundle-arg){
//创建并返回加载程序
}
公共void onLoadFinish(加载程序,列表数据){
//用新数据更新adapater
}
公共void onLoaderReset(加载器){
//清除适配器中的所有数据
}
}
这些都是很直截了当的东西。您应该能够通过阅读Android开发页面上的加载程序、适配器等来填补空白。事实上,我们使用的是一个充满“SpinnerItem”的“列表”,这当然取决于您的特定实现,以及您选择使用的适配器类型。您可以自由选择所需的任何实际数据结构。再次,请参考Android开发页面了解详细信息。就loader类而言,您需要执行以下操作:

MyNetworkLoader extends AsyncTaskLoader<List<SpinnerItem>>
  public MyNetworkLoader(Context context){
    super(context);
  }

  List<SpinnerItem> loadInBackground(){
     //Get data from server
  }
}
MyNetworkLoader扩展了AsyncTaskLoader
公共MyNetworkLoader(上下文){
超级(上下文);
}
列表loadInBackground(){
//从服务器获取数据
}
}
在loadInBackground方法中,您将使用CustomHttpClient查询服务器并将响应转换为某种数据结构(与前面一样,在本例中,我们使用的是“SpinnerItem”的“列表”)

最后,在网络请求完成之前,微调器将为空。您可能希望包含某种逻辑,通知用户正在加载微调器的内容

就这样。新的加载器api使事情变得非常简单

MyNetworkLoader extends AsyncTaskLoader<List<SpinnerItem>>
  public MyNetworkLoader(Context context){
    super(context);
  }

  List<SpinnerItem> loadInBackground(){
     //Get data from server
  }
}