2013-06-13 4 views
0

Я пытаюсь около 2 недель попробовать и загрузить ArrayList на счетчик. Мне не повезло, как вы можете видеть из пропущенных попыток в приведенном ниже коде. Я оставил комментарии в коде, чтобы показать вам, что я пробовал буквально сотни способов сделать это. Я могу получить данные на счетчике, но он не отображается правильно. Я попытался получить ключ: данные из hashmap, load arraylist для spinner, получить объект от arraylist и многое другое. Я не очень хорошо разбираюсь в Java/Android, но отлично работает в VB. Я очень сильно борюсь с Android. Я был бы признателен за помощь в этом вопросе. Заранее спасибо. Еще раз спасибо.Невозможно правильно загрузить данные JSON в Spinner

Я пытался загрузить изображение, но у меня есть репутация в 1. Итак, вот что я получаю:

THIS IS THE RESPONSE: 
{"category":"Accessories"} 
{"category":"Battery Packs"} 
{"category":"Hunting Lights"} 
{"category":"Other"} 




import java.util.ArrayList; 
    import java.util.HashMap; 

import java.util.List; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 
import org.apache.http.NameValuePair; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.provider.SyncStateContract.Constants; 
import android.util.Log; 
import android.view.Menu; 
import android.widget.ArrayAdapter; 
import android.widget.Spinner; 

public class Shop extends Activity { 
    //PHP to get catagories 
    public static String url_to_send = "http://xxx.xxx.xxx.xxx/load_catagories.php"; 
    //TAG to send to PHP to retrieve catagories 
    private static final String TAG_CATAGORIES= "catagories"; 
    private static final String TAG_CATAGORY= "catagory"; 
    //Success tag 
    private static final String TAG_SUCCESS = "success"; 
    //Dialog 
    ProgressDialog pDialog; 
    //JSON Parser 
    JSONParser jParser = new JSONParser(); 
    JSONArray catagories = null; 
    Spinner MySpinner; 
    ArrayList<HashMap<String, String>> catagoryList; 
    List<String> items; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_shop); 
     MySpinner = (Spinner)findViewById(R.id.spinner1); 

     // Hashmap for ListView 
     catagoryList = new ArrayList<HashMap<String, String>>(); 

     new LoadAllProducts().execute(); 
    } 
    String theCatagory; 
    class LoadAllProducts extends AsyncTask<String, String, String> { 

     /** 
     * Before starting background thread Show Progress Dialog 
     * */ 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(Shop.this); 
      pDialog.setMessage("Loading Catagories. Please wait..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(false); 
      pDialog.show(); 
     } 

     /** 
     * getting All products from url 
     * */ 
     protected String doInBackground(String... args) { 
      // Building Parameters 
      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      // getting JSON string from URL 
      JSONObject json = jParser.makeHttpRequest(url_to_send, "GET", params); 

      // Check your log cat for JSON reponse 
      Log.d("All Catagories: ", json.toString()); 

      try { 
       // Checking for SUCCESS TAG 
       int success = json.getInt(TAG_SUCCESS); 

       if (success == 1) { 
        // products found 
        // Getting Array of Products 
        catagories = json.getJSONArray(TAG_CATAGORIES); 

        // looping through All Products 
        items = new ArrayList<String>(); 
        for (int i = 0; i < catagories.length(); i++) { 
         JSONObject c = catagories.getJSONObject(i); 
         items.add(catagories.getString(i)); 

         // Storing each json item in variable 
         theCatagory = c.getString(TAG_CATAGORY); 


         // creating new HashMap 
         HashMap<String, String> map = new HashMap<String, String>(); 

         // adding each child node to HashMap key => value 
         map.put(TAG_CATAGORY, theCatagory); 
         // adding HashList to ArrayList 
         catagoryList.add(map); 



        } 

       } else { 
        // no products found 
        // Launch Add New product Activity 

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

      return null; 
     } 

     /** 
     * After completing background task Dismiss the progress dialog 
     * **/ 
     protected void onPostExecute(String file_url) { 
      // dismiss the dialog after getting all products 
      pDialog.dismiss(); 
      // updating UI from Background Thread 
      runOnUiThread(new Runnable() { 
       public void run() { 
        /** 
        * Updating parsed JSON data into ListView 
        * */ 
       // ListAdapter adapter = new SimpleAdapter(MainActivity.this, productsList,R.layout.list_item, new String[] { TAG_PID,TAG_NAME},new int[] { R.id.pid, R.id.name }); 
        //setListAdapter(adapter); 
        //ListAdapter adapter=new LazyAdapter(Shop.this, catagoryList); 
        //list.setAdapter(adapter); 
        //setListAdapter(adapter); 

        //String[] myData = {}; 
       // myData = catagoryList.toArray(new String[catagoryList.size()]); 
    // SimpleAdapter adapter = new SimpleAdapter(Shop.this, catagoryList,R.layout.list_item, new String[] { TAG_CATAGORY},new int[] { theCatagory }); 
        // MySpinner.setAdapter(adapter); 



    //ArrayAdapter<String> adapter = new ArrayAdapter<String> (Shop.this, android.R.layout.simple_spinner_item, catagoryList);  
        // MySpinner.setAdapter(adapter); 

        //ArrayList<String> list=new ArrayList<String>(); 
       //for(int i=0;i<catagories.length();i++) 
        //{ 

         //try { 
         //list.add(catagories.getString(i)); 
         //} catch (JSONException e) { 
         // TODO Auto-generated catch block 
         // e.printStackTrace(); 
         //} 

         // } 

     String [] anArrayOfStrings = new String[theCatagory.length()]; 
          items.toArray(anArrayOfStrings); 




          ArrayAdapter<String>spinnerMenu = new ArrayAdapter<String(Shop.this,android.R.layout.simple_list_item_1,anArrayOfStrings); 
     MySpinner.setAdapter(spinnerMenu); 








       } 

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

     } 

Вот это все-категории: LogCat

06-13 10:50:59.120: D/All Catagories:(5329): {"success":1,"catagories":[{"catagory":"Accessories"},{"catagory":"Battery Packs"},{"catagory":"Hunting Lights"}]} 
+0

У вас есть правильный ответ. ?? – Riser

+0

Можете ли вы отправить отзыв с logCat на эту строку в вашем коде: Log.d («Все категории:», json.toString()); ? – Tomislav

+0

Добавил вывод LogCat, определил ответ. В очередной раз благодарим за помощь. –

ответ

1

Ваш код довольно беспорядочно - возможно, после всех различных попыток, которые вы предприняли для правильной работы вещей, но я думаю, что основные проблемные области находятся в doInBackground() и onPostExecute().

После того, как вы потратили минуту на очистку своего кода, все оказалось нормально работать, а это значит, что вы были почти там. Я в основном упростил логику разбора JSON; то есть вам не нужен Map, и все, что вам нужно сделать, - это просто добавить каждую категорию в список, который позже будет передаваться в адаптер-счетчик. Ниже приведен фрагмент кода - если вы обнаружите, что какие-либо переменные, которые у вас были до этого, теперь отсутствуют, возможно, это означает, что я удалил их, потому что они больше не нужны.

List<String> items = new ArrayList<String>(); 

/** 
* getting All products from url 
* */ 
protected String doInBackground(String... args) { 
    try { 
     // Building Parameters 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     // getting JSON string from URL 
     JSONObject json = jParser.makeHttpRequest(url_to_send, "GET", params); 

     // Check your log cat for JSON reponse 
     Log.d("All Catagories: ", json.toString()); 

     // Checking for SUCCESS TAG 
     int success = json.getInt(TAG_SUCCESS); 

     if (success == 1) { 
      // products found 
      // Getting Array of Products 
      JSONArray catagories = json.getJSONArray(TAG_CATAGORIES); 

      // looping through All Products 
      for (int i = 0; i < catagories.length(); i++) { 
       JSONObject c = catagories.getJSONObject(i); 

       // Storing each json item in variable 
       String category = c.getString(TAG_CATAGORY); 

       items.add(category); 
      } 

     } else { 
      // no products found 
      // Launch Add New product Activity 

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

    return null; 
} 

Тогда onPostExecute(), из которого я удалил все строки комментариев. Кроме того, этот метод уже запускается в потоке пользовательского интерфейса, поэтому нет необходимости публиковать Runnable по адресу Handler. Здесь можно напрямую коснуться взглядов. Единственное другое изменение заключалось в том, чтобы поставить items (который мы заполнили категориями doInBackground()) адаптеру.

/** 
* After completing background task Dismiss the progress dialog 
* **/ 
protected void onPostExecute(String file_url) { 
    // dismiss the dialog after getting all products 
    pDialog.dismiss(); 

    ArrayAdapter<String> spinnerMenu = new ArrayAdapter<String>(Shop.this, android.R.layout.simple_list_item_1, items); 
    MySpinner.setAdapter(spinnerMenu); 
} 
+0

Лорд. Я был близко. Я извиняюсь за грязный код. Я был очень расстроен тем, что независимо от того, что я сделал, у меня не было никакого результата или неправильного результата, поэтому я старался идти в ногу со всем. Спасибо за все, и ваше решение работает отлично. Спасибо миллион МЗ. –

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