2016-05-04 6 views
0

Ich bin neu bei LoopJ Android Asynchronous-Http-Client.Ich herausgefunden, wie die Daten aus der Datenbank mit meinem PHP-Web-Service erhalten.Befüllen Spinner Android und Asynchronous-Http-Client

Mein ServiceHandler:

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);};} 

Mein AddBookActivity: In dieser Klasse i getAllCat verwenden Kategorien aus der Datenbank zu erhalten, aber jetzt, wie kann ich meine Spinner bevölkern?

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(); 
      } 
     }); 
    } 
} 
+0

Nur eine kurze Frage - so möchten Sie spinner die Liste der ‚Kategorienamen‘ enthalten? Bitte bestätigen Sie, damit ich eine Lösung vorschlagen kann, wenn Sie das wünschen – ishmaelMakitla

+0

Es ist genau wie Sie sagten, ich möchte, dass mein Spinner die Liste der 'Kategorienamen' enthält – Amal

+0

OK, überprüfen Sie bitte meine Antwort und lassen Sie mich wissen, wenn es funktioniert . – ishmaelMakitla

Antwort

0

Wenn Sie nur die Liste der Kategorienamen füllen wollte - statt JSONArray - dann können Sie Ihr getAllCat() zu so etwas wie dies ändern:

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(); 
      } 
     } 
    }); 
} 

Wenn Sie jedoch die JSONArray verwenden möchten - Dann benötigen Sie einen "speziellen" Adapter. Ich habe kürzlich eine ähnliche Frage beantwortet. Bitte überprüfen Sie here for possible solution. Ich hoffe, das hilft.

+0

danke, seine Arbeit mit youre Lösung und Ändern der öffentlichen void onSuccess (int statusCode, cz.msebera.android.httpclient.Header [] - Header, JSONArray Antwort) zu öffentlichen void onSuccess (int statusCode, Header [] - Header, JSONObject Antwort), weil ich I JsonObject und kein JsonArray bekomme – Amal

0

schreiben Sie diesen Code in Ihre onSuccess Methode

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(); 
}