【问题标题】:Populate spinner android and Asynchronous-Http-Client填充微调器 android 和 Asynchronous-Http-Client
【发布时间】:2016-05-04 18:30:03
【问题描述】:

我是 LoopJ Android Asynchronous-Http-Client 的新手。我知道如何使用我的 PHP Web 服务从数据库中获取数据。

我的服务处理程序:

public class ServiceHandler {
    private static String BASE_URL="http:/my/url/";
    private static String GET_CAT= BASE_URL+"get_cat.php";
    private  static AsyncHttpClient client= new AsyncHttpClient();
    public  static void getAllCat(RequestParams params,AsyncHttpResponseHandler asyncHttpResponseHandler
    ){
        client.get(GET_CAT,params,asyncHttpResponseHandler);};}

我的 AddBookActivity:在这个类中,我使用 getAllCat 从数据库中获取类别,但现在我如何填充我的微调器?

public class AddBookActivity extends AppCompatActivity {
ServiceHandler client = new ServiceHandler();
    private Spinner spCat;
    @Override
    protected void onResume() {
        super.onResume();
        getAllCat();
    }
    private void getAllCat(){

        client.getAllCat(null, new JsonHttpResponseHandler(){
                    @Override
                    public void onSuccess(int statusCode,cz.msebera.android.httpclient.Header[] headers, JSONArray response) {

                        try {

                            for (int i=0; i<response.length();i++){
                                Categories cat = new Categories();

                                JSONObject obj =response.getJSONObject(i);
                                cat.setName(obj.getString("name"));
                            }

                        }catch (Exception e){
                            e.printStackTrace();
                        }}} ); }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_book);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        spCat=(Spinner)findViewById(R.id.spinnercatname);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }
}

【问题讨论】:

  • 只是一个简单的问题 - 所以你想微调包含“类别名称”的列表?请确认,如果这是您正在寻找的,我可以提出解决方案
  • 正如你所说,我希望我的微调器包含“类别名称”列表
  • 好的,请检查我的答案,如果它有效,请告诉我。

标签: android asynchronous spinner android-async-http loopj


【解决方案1】:

如果您只想填充类别名称列表 - 而不是 JSONArray - 那么您可以将您的 getAllCat() 更改为如下内容:

private void getAllCat(){

    client.getAllCat(null, new JsonHttpResponseHandler(){
        @Override
        public void onSuccess(int statusCode,cz.msebera.android.httpclient.Header[] headers, JSONArray response) {
            try {
                List<String> categoryNames =  new ArrayList<String>();
                for (int i=0; i<response.length();i++){
                    JSONObject obj =response.getJSONObject(i);
                    String categoryName = obj.getString("name");
                    categoryNames.add(categoryName);
                }
                //now that you have populated the array of category names - you can create the adapter for the spinner
                ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, categoryNames);
                spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                spCat.setAdapter(spinnerAdapter);               
                spinnerAdapter.notifyDataSetChanged();                

            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }); 
}

但是,如果您想使用 JSONArray - 那么您将需要一个“特殊”适配器。我最近回答了一个类似的问题。请查看here for possible solution。 我希望这会有所帮助。

【讨论】:

  • 谢谢你,它的工作是使用你的解决方案并将 public void onSuccess(int statusCode,cz.msebera.android.httpclient.Header[] headers, JSONArray response) 更改为 public void onSuccess(int statusCode , Header[] headers, JSONObject response) 因为我得到了我的 jsonObject 而不是 JsonArray
【解决方案2】:

将此代码写入您的 onSuccess 方法

try {
    ArrayList<String> category = new ArrayList<String>();
    for (int i=0; i<response.length();i++){
       JSONObject obj = response.getJSONObject(i);
       category.add(obj.getString("name"));
    }

   ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(AddBookActivity.this, android.R.layout.simple_list_item_1, category);
   spCat.setAdapter.setAdapter(dataAdapter);              

}catch (Exception e){
   e.printStackTrace();
}

【讨论】:

    猜你喜欢
    • 2014-10-27
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    相关资源
    最近更新 更多