2016-04-27 10 views
1

Ich versuche, Spinner Werte von URL mit Json laden.Laden Spinner von URL mit JSON

Der Code Ich verwende ist

private class DownloadJSON extends AsyncTask<Void, Void, Void> 
    { 
     protected Void doInBackground(Void... params) 
     { 
      // Locate the WorldPopulation Class 
      world = new ArrayList<WorldPopulation>(); 
      // Create an array to populate the spinner 
      worldlist = new ArrayList<String>(); 
      // JSON file URL address 
      jsonobject = JSONfunctions.getJSONfromURL("http://"); 

     // Log.v("Load Employees",jsonobject.toString()); 

      try 
      { 
       // Locate the NodeList name 
       jsonarray = jsonobject.getJSONArray("Employees"); 
       for (int i = 0; i < jsonarray.length(); i++) 
       { 
        jsonobject = jsonarray.getJSONObject(i); 

        WorldPopulation worldpop = new WorldPopulation(); 

        worldpop.setRank(jsonobject.optString("FirstName")); 
        worldpop.setCountry(jsonobject.optString("LastName")); 
        worldpop.setPopulation(jsonobject.optString("EmpNo")); 
        //  worldpop.setFlag(jsonobject.optString("flag")); 
        world.add(worldpop); 

        // Populate spinner with country names 
        worldlist.add(jsonobject.optString("FirstName") + "-" +jsonobject.optString("EmpNo")); 

        mySpinner.setAdapter(new ArrayAdapter<String>(VisitorEntry.this,android.R.layout.simple_spinner_dropdown_item, worldlist)); 
       } 
      } 
      catch (Exception e) 
      { 
       // Log.e("Error", e.getMessage()); 
       e.printStackTrace(); 
      } 
      return null; 
     } 

Dieser Code zeigt manchmal zur Folge haben und nicht angezeigt irgendwann. Ich verstehe das Problem nicht und möchte wissen, ob es andere Möglichkeiten gibt, Werte von URL in Spinner zu holen. Die Zeit, ich bin nicht mit den Werten angezeigt bekommen, erhalte ich folgende Fehler:

04-27 14:19:25.979: W/System.err(17486): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 
04-27 14:19:25.979: W/System.err(17486): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4611) 
04-27 14:19:25.979: W/System.err(17486): at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:867) 
04-27 14:19:25.979: W/System.err(17486): at android.view.ViewGroup.invalidateChild(ViewGroup.java:4066) 
04-27 14:19:25.979: W/System.err(17486): at android.view.View.invalidate(View.java:10271) 
04-27 14:19:25.979: W/System.err(17486): at android.view.View.invalidate(View.java:10226) 
04-27 14:19:25.979: W/System.err(17486): at android.widget.AbsSpinner.resetList(AbsSpinner.java:153) 
04-27 14:19:25.979: W/System.err(17486): at android.widget.AbsSpinner.setAdapter(AbsSpinner.java:104) 
04-27 14:19:25.979: W/System.err(17486): at android.widget.Spinner.setAdapter(Spinner.java:382) 
04-27 14:19:25.989: W/System.err(17486): at com.example.wepvms.VisitorEntry$DownloadJSON1.doInBackground(VisitorEntry.java:854) 
04-27 14:19:25.989: W/System.err(17486): at com.example.wepvms.VisitorEntry$DownloadJSON1.doInBackground(VisitorEntry.java:1) 
04-27 14:19:25.989: W/System.err(17486): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
04-27 14:19:25.989: W/System.err(17486): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
04-27 14:19:25.989: W/System.err(17486): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
04-27 14:19:25.989: W/System.err(17486): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
04-27 14:19:25.989: W/System.err(17486): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
04-27 14:19:25.989: W/System.err(17486): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
04-27 14:19:25.989: W/System.err(17486): at java.lang.Thread.run(Thread.java:856) 
+0

Sie können Volley Verwenden Sie für die gleiche – Haroon

+0

JSONObject = JSONfunctions.getJSONfromURL ("http: //"); Ist es die URL-Adresse, von der Sie Daten abrufen möchten? – Haroon

+0

Ja. Ich habe eine URL, die iam using und iam in der Lage ist, die Werte richtig zu holen. @Haroon – Mounika

Antwort

0

ich schlage vor, versuchen setzen

mySpinner.setAdapter(new ArrayAdapter<String>(VisitorEntry.this,android.R.layout.simple_spinner_dropdown_item, worldlist)); 

das Innere runonUiThread wie dieses

runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 

mySpinner.setAdapter(new ArrayAdapter<String>(VisitorEntry.this,android.R.layout.simple_spinner_dropdown_item, worldlist)); 

    } 
}); 
+0

froh, Ihnen zu helfen Happy Coding :) –

+0

Ich habe 3 Spinners in meinem Code, kann ich alle 3 in der gleichen ui ??? @Aditya – Mounika

+0

Wenn URL anders ist, dann müssen Sie es seprate machen –

0

allererst Sie Arraylist für stroing Daten als erstellen Baseadapter Klasse für Anzeigedaten ..

+0

können Sie mich mit etwas Code oder Beispiel vorschlagen, wie ich nicht das Wissen über die Dinge Sie sprechen über @Rohit Rathore – Mounika

+0

hallo Sie können adapter seite von doInHintergrund setzen, Adapter in onPostExecute setzen .. –

0

verwenden können Hallo können Sie eine Bibliothek verwenden GSON dies dies leichter zu analysieren

Sie this für verweisen können, wie er analysieren und fügen Sie ihn in seine Liste Objekt

+0

Vielen Dank. Aber ich muss nur json benutzen. Suggest mich, wenn Sie wissen, mit json @Kuro – Mounika

+0

Wenn Sie eine Hardway zuerst tun möchten, müssen Sie eine HttpRequest verwenden, um eine Antwort zu erhalten und dann parsen es ist viel sicherer als die Verwendung von JSONFunctions können Sie auf diesen Link verweisen http: // Entwickler .android.com/training/volley/simple.html – Kuro