0

Semi-new to programming Android apps, or apps in general. I'm trying to create a bunch of buttons based on JSON response. The response is coming back good (checked in Log.i) and no errors showing an issue, but the buttons aren't displaying. Here's my main activity, asynctask class and main xml. Any feedback super appreciated.

Main Activity:

public class MainActivity extends ActionBarActivity {
    Spinner spinner;
    public SpinAdapter adapter;
    JSONObject jsonobject;
    JSONArray jsonarray;
    ProgressDialog mProgressDialog;
    ArrayList<String> barlist;
    Brewery[] breweries;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        spinner = (Spinner) findViewById(R.id.planets_spinner);
        Log.i("msg", "sent to json");
        new DownloadJSON().execute();
        Log.i("msg", "past to json");
    }

    private class DownloadJSON extends AsyncTask<Void, Void, Void> 
    {

        @Override
        protected Void doInBackground(Void... params) {

        barlist = new ArrayList<String>();
        try
        {
            Log.i("msg", "inside try");
            HttpClient httpclient = new DefaultHttpClient();
            httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
            HttpGet request = new HttpGet("http://fltapmap.com/populate.php");
            HttpResponse response = httpclient.execute(request);
            HttpEntity resEntity = response.getEntity();

            String _response=EntityUtils.toString(resEntity); 
            jsonobject = new JSONObject(_response); 
            jsonarray = jsonobject.getJSONArray("breweries");
            Log.i("msg", "breweries lengths: "+jsonarray.length());
            breweries = new Brewery[jsonarray.length()];
            for (int i = 0; i < jsonarray.length(); i++) {
                jsonobject = jsonarray.getJSONObject(i);
                breweries[i] = new Brewery();
                breweries[i].setId(jsonobject.optInt("ID"));
                breweries[i].setName(jsonobject.optString("brewery"));
            }
        }catch(Exception e)
        {
            Log.i("msg",""+e.getMessage());

        }
        return null;

        }
        protected void onPostExecute(Void args) {
            // Spinner adapter
            adapter = new SpinAdapter(MainActivity.this,android.R.layout.simple_spinner_item,breweries);
            spinner.setAdapter(adapter);

            // You can create an anonymous listener to handle the event when is selected an spinner item
            spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> adapterView, View view,
                        int position, long id) {
                    // Here you get the current item (a User object) that is selected by its position
                    Brewery brewery = adapter.getItem(position);
                    // Here you can do the action you want to...
                    Log.i("msg", "inside selected method"+String.valueOf(brewery.getId()));

                    new RetrieveBeersTask(MainActivity.this, findViewById(R.id.beer_list)).execute(String.valueOf(brewery.getId()));
                    /*
                    jsonarray = jsonobject.getJSONArray("ontap");
                    Log.i("msg", "breweries lengths: "+jsonarray.length());
                    Button beer_btns[] = new Button[jsonarray.length()];
                    Log.i("msg","buttons made");

                    for (int i = 0; i < jsonarray.length(); i++) {
                        Log.i("msg","in loop"+String.valueOf(i));
                        LinearLayout layout = (LinearLayout)findViewById(R.id.beer_list);

                        beer_btns[i] = new Button(MainActivity.this);

                        beer_btns[i].setText(jsonarray.getJSONObject(i).getString("beer"));

                        beer_btns[i].setGravity(Gravity.CENTER_HORIZONTAL);

                        beer_btns[i].setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                //add your code here 
                            }
                        });
                        layout.addView(beer_btns[i]);
                    }
                    */
                }
                @Override
                public void onNothingSelected(AdapterView<?> adapter) {  }
            });
        }
   }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

AsyncTask Class

public class RetrieveBeersTask extends AsyncTask<String, Void, ArrayList<String>> {

    private Exception exception;
    JSONObject jsonobject;
    public JSONArray jsonarray;
    public ArrayList<String> return_beers;
    private Activity myMain;
    private View myLayout;

    public RetrieveBeersTask(Activity passedin, View mainLayout) {
        this.myMain = passedin;
        this.myLayout = mainLayout;
    }

    @Override
    protected ArrayList<String> doInBackground(String... brewery) {
        try {
            Log.i("msg", "inside launcher: Brewery - "+brewery[0]);
            HttpClient httpclient = new DefaultHttpClient();
            httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
            HttpGet request = new HttpGet("http://fltapmap.com/ontap.php?id="+brewery[0]);
            HttpResponse response = httpclient.execute(request);
            Log.i("msg","request back");
            HttpEntity resEntity = response.getEntity();
            String _response=EntityUtils.toString(resEntity);

            /*
            Log.i("msg","ssending request");
            HttpResponse response = httpclient.execute(request);
            Log.i("msg","request back");
            HttpEntity resEntity = response.getEntity();
            Log.i("msg","should have response");
            String _response=EntityUtils.toString(resEntity);
            Log.i("msg","got repsonse"+_response);
            */
            jsonobject = new JSONObject(_response); 
            jsonarray = jsonobject.getJSONArray("ontap");

            return_beers = new ArrayList<String>();
            for (int i = 0; i < jsonarray.length(); i++) {
                Log.i("msg", "beer name: "+jsonarray.getJSONObject(i).getString("beer"));
                return_beers.add(jsonarray.getJSONObject(i).getString("beer"));
            }
            return return_beers;        
        } catch(Exception e) {
            e.printStackTrace();
            return null;        
        }            
    }

    protected void onPostExecute(ArrayList<String> beers) {
        // TODO: check this.exception 
        // TODO: do something with the feed
        Log.i("msg", "length of array: "+String.valueOf(beers.size()));
        Button beer_btns[] = new Button[jsonarray.length()];
        for (int i = 0; i < beers.size(); i++) {

            beer_btns[i] = new Button(myMain);

            beer_btns[i].setText(beers.get(i));

            beer_btns[i].setGravity(Gravity.CENTER_HORIZONTAL);

            beer_btns[i].setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //add your code here 
                }
            });
            LinearLayout layout = (LinearLayout)myLayout;
            Log.i("msg",String.valueOf(layout));
            layout.addView(beer_btns[i]);
        }
    }
}
Bill Mote
  • 12,644
  • 7
  • 58
  • 82

0 Answers0