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

时间:2011-09-29 23:55:20

标签: php android mysql spinner

我正在使用CustomHttpClient连接并从我的Android应用程序执行查询。我想知道是否有可能从php / mysql查询中填充一个微调器,如果是这样,它将如何完成?

2 个答案:

答案 0 :(得分:4)

所以这实际上应该相当容易。在实现细节方面你还没有给我们太多的工作,所以我会尽力为你编写半假的代码并给你一个很好的答案。

我们将要从单独的线程执行查询,以便在我们等待网络响应时不阻止UI线程。您可以使用AsyncTask,IntentService或某种Loader来实现这些方法。我想在你的情况下,AsyncTaskLoader类派生的自定义类将是最好的。所以让我们看一下它的外观(注意你需要访问一些较新的apis才能使用加载器,如果你正在为低于api级别11的任何东西编写这个应用程序,请查看http://developer.android.com/resources/articles/backward-compatibility.html)。

MyActivity extends Activity implements LoaderManager.LoaderCallbacks<List<SpinnerItem>>{
  private Adapter<SpinnerItem> spinnerAdapter;
  private static final int SPINNER_LOADER_ID = 0;

  public void onCreate(Bundle icicle){
     Spinner theSpinner = findViewById(R.id.the_spinner);
     spinnerAdapater = new Adapter<SpinnerItem>(...); //create empty adapter
     spinnerAdapater.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
     theSpinner.setAdapter(spinnerAdapater);
     getLoaderManager().initLoader(SPINNER_LOADER_ID, null, this);
  }

  public Loader<List<SpinnerItems>> onCreateLoader(int id, Bundle arg){
    //Create and return your loader
  }

  public void onLoadFinish(Loader<List<SpinnerItem>> loader, List<SpinnerItem> data){
    //update your adapater with the new data
  }

  public void onLoaderReset(Loader<List<SpinnerItem>> loader){
    //clear out all the data in the adapter
  }

}

这是非常简单的事情。您应该能够通过阅读Android开发页面上的加载器,适配器等来填补空白。我们使用一个充满“SpinnerItem”的“List”这个事实当然取决于你的特定实现,就像你选择使用的适配器类型一样。随意选择您想要的任何实际数据结构。再次,请参阅Android开发页面了解详细信息。就装载机类而言,你会想做这样的事情:

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

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

在loadInBackground方法中,您将使用CustomHttpClient查询服务器并将响应转换为某种数据结构(就像之前一样,在本例中我们使用的是“SpinnerItem”的“List”)。

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

就是这样。新的装载程序api使事情变得非常简单。

答案 1 :(得分:0)

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