Android从php/mysql查询填充旋转器


Android populate spinner from php/mysql query

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

这其实很简单。在实现细节方面,你并没有给我们太多的工作要做,所以我将尽我最大的努力为你编写半伪代码,并给你一个很好的总体答案。

我们想要在一个单独的线程中执行查询,以便在等待网络响应时不会阻塞UI线程。你可以通过许多不同的方式来实现,包括使用AsyncTask、IntentService或某种Loader。我认为在你的情况下,从AsyncTaskLoader类派生的自定义类将是最好的。因此,让我们看看这会是什么样子(注意,为了使用加载器,您需要访问一些较新的api,如果您编写此应用程序的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")。

最后需要注意的是,在网络请求完成之前,转轮将为空。您可能希望包含某种逻辑,通知用户旋转控件的内容正在加载。

就是这样。

是的,这是可能的。使用php/mysql查询检索项目列表,然后使用适配器将这些项目提供给微调器。如何正确地重写SpinnerAdapter

的方法