【问题标题】:loading spinner from url using json使用 json 从 url 加载微调器
【发布时间】:2016-04-27 17:36:40
【问题描述】:

我正在尝试使用 json 从 url 加载微调器值。

我使用的代码是

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

此代码有时显示结果,有时不显示。我不理解这个问题,想知道是否有其他方法可以将值从 url 获取到微调器。 当我没有显示值时,我收到以下错误:

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)

【问题讨论】:

  • 你可以使用 Volley 来做同样的事情
  • jsonobject = JSONfunctions.getJSONfromURL("http://");是您尝试从中获取数据的 url 地址吗?
  • 是的。我有一个正在使用的 url,并且 iam 能够正确获取值。 @Haroon
  • 最好你试试凌空
  • 请再次查看帖子,当值未显示时,我已粘贴错误代码@Aditya

标签: android json url spinner


【解决方案1】:

我建议尝试放

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

这里面runonUiThread这样的

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

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

    }
});

【讨论】:

  • 很高兴帮助你快乐编码:)
  • 如果 url 不同,那么你需要把它分开
【解决方案2】:

首先你可以使用 Arraylist 来存储数据而不是创建 Baseadapter 类 用于显示数据..

【讨论】:

  • 你能给我一些代码或例子的建议吗,因为我不知道你在说什么@Rohit Rathore
  • 您好,您可以在 doInBackground 之外设置适配器,在 onPostExecute 中设置适配器..
【解决方案3】:

您好,您可以使用库GSON 这使得解析更容易

你可以参考this他如何解析并将其添加到他的列表对象中

【讨论】:

  • 谢谢。但我只能使用 json。如果您知道 json @Kuro,请向我推荐
  • 如果你想先做一个hardway,你需要使用一个HttpRequest来获取响应然后解析它比使用JSONFunctions更安全,你可以参考这个链接developer.android.com/training/volley/simple.html
猜你喜欢
  • 2023-03-12
  • 2016-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
相关资源
最近更新 更多