2012-04-10 5 views
0

Еще один Android-новичок здесь!Невозможно заполнить счетчик из удаленной базы данных

Хорошо, я использовал при использовании Toast, чтобы помочь мне проверить наличие ошибок. Я получаю 403 запрещенную ошибку, и я не знаю, что ее вызывает. Правильный URL-адрес, поскольку другая функция my возвращает данные из базы данных.

public class FillKeg extends Activity { 

    Spinner spinBeerList; 
    ArrayList<String> BeerList; 
    ArrayAdapter<String> adapter; 

    JSONArray jArray; 
    String result = null; 
    InputStream is = null; 
    StringBuilder sb = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.fillkeg); 
     spinBeerList = (Spinner)findViewById(R.id.spinBeerList); 
     BeerList = new ArrayList<String>(); 
     new getBeerList().execute("http://*****/kegdroid/getBeerList.php"); 
     adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, BeerList);  
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinBeerList.setAdapter(adapter); 
    } 

    private class getBeerList extends AsyncTask<String, Void, String> { 

     protected String doInBackground(String... urls) { 
      //http post 
      for (String url : urls) { 
       DefaultHttpClient httpclient = new DefaultHttpClient(); 
       HttpPost httppost = new HttpPost(url); 
       try{ 
        HttpResponse response = httpclient.execute(httppost); 
        HttpEntity entity = response.getEntity(); 
        is = entity.getContent(); 

        BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8); 
        sb = new StringBuilder(); 
        sb.append(reader.readLine() + "\n"); 

        String line = "0"; 
        while ((line = reader.readLine()) != null) { 
          sb.append(line + "\n"); 
        } 
        is.close(); 
        result = sb.toString(); 
       } 
       catch(Exception e){ 
        Log.e("log_tag", "Error in http connection" + e.toString()); 
       } 
      } 
      return result; 
     } 

     protected void onPostExecute(String result){ 
      try{ 
       jArray = new JSONArray(result); 
       JSONObject json_data = null; 
       for(int i = 0; i < jArray.length(); i++){ 
        json_data = jArray.getJSONObject(i); 
        BeerList.add(json_data.getString("ContentsName")); 
       }  
      } 
      catch(JSONException ex){ 
       ex.printStackTrace(); 
      } 
      catch (ParseException ex) { 
       ex.printStackTrace(); 
      } 
     } 

    } 
} 
+0

NO. НИКОГДА. КОГДА-ЛИБО. DO HTTP STUFF ON UI THREAD. ЭТО. ЯВЛЯЕТСЯ. ПЛОХО. – OcuS

+0

Хорошо, я изменил его, чтобы реализовать AsyncTask. Однако Spinner еще не заселен. – Crevax

ответ

0

Я чувствую себя действительно глупо об этом, но моя ошибка связана с конфигурацией Apache, а не с кодом приложения. Недавнее обновление Apache для моей установки WAMP запретило доступ от вызовов к моему сетевому IP.

Большое спасибо OcuS и Брайану Кули за помощь в решении других областей моего кода!

0

Вы обновляете ArrayList резервное ваш Adapter без вызова notifyDataSetChanged. Попробуйте добавить звонок adapter.notifyDataSetChanged(); в конец onPostExecute.

В качестве альтернативы вы можете позвонить adapter.add(json_data.getString("ContentsName")); вместо аналогичного вызова BeerList, а Spinner должен обновиться автоматически.

+0

Это не было решением этой конкретной проблемы (выяснилось, что я чувствую себя глупо, что вызвало ее), но она решила проблему, которую я собирался посмотреть дальше. Так спасибо за это! – Crevax

Смежные вопросы