android - JSONArray 到 Spinner

标签 android json android-actionbar android-spinner

我有一个问题。我没有将 JSONArray 设置为 Spinner。我的 JSON 看起来 ["category1","category2","category3"] 如何将此 JSONArray 获取到微调器?不知道我的代码好不好

public class Main extends Activity {

    String urlCat = "http://tvapp.pcrevue.sk/categories.json";

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

         JSONArray jsonArray = getJSONArrayFromUrl(urlCat);

        final ActionBar actionBar = getActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setDisplayUseLogoEnabled(false);
        ArrayAdapter<String> spinnerMenu = new ArrayAdapter<String>(actionBar.getThemedContext(), android.R.layout.simple_list_item_1, jsonArray);
        actionBar.setListNavigationCallbacks(spinnerMenu, 
                new ActionBar.OnNavigationListener() {

                    @Override
                    public boolean onNavigationItemSelected(int itemPosition, long itemId) {
                        FragmentTransaction tx = getFragmentManager().beginTransaction();
                        switch (itemPosition) {
                        case 0:
                            tx.replace(android.R.id.content, new Tab1Fragment());
                            break;
                        case 1:
                            tx.replace(android.R.id.content, new Tab2Fragment());
                            break;

                        default:
                            break;
                        }
                        tx.commit();
                        return false;
                    }
                });
    }

    public JSONArray getJSONArrayFromUrl(String url) {
        InputStream is = null;
        JSONArray jObj = null;
        String json = "";
        // Making HTTP request
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(url);

            HttpResponse httpResponse = httpClient.execute(httpGet);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"));
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                //json += line;
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            jObj = new JSONArray(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;

    }
}

我需要你的帮助。 谢谢

最佳答案

我在 ArrayAdapter 中找不到任何接受 JSONArray 对象的构造函数,如果您有任何疑问,请参阅 Array Adapter .

您需要传递列表而不是 JSONArray。 并且, 您正在执行 UI 线程的网络操作,因此您将获得 NetworkOnMainThread 异常。低版本没问题,但高版本会抛出异常。尝试使用 AsyncTask 获取值或使用 Separate Thread

所以得到这样的列表

ArrayList<String> list = new ArrayList<String>();
for(int i=0; i<jsonArray.length(); i++) {
    list.add(jsonArray.getString(i));
}
ArrayAdapter<String> spinnerMenu = new ArrayAdapter<String>(actionBar.getThemedContext(), android.R.layout.simple_list_item_1, list);

关于android - JSONArray 到 Spinner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15462031/

相关文章:

android - 忽略特定文件的 IconDensities lint 警告

json - 如何在 Json 中序列化 val 元素

java - 以编程方式添加操作栏菜单项

Android Action Bar (Sherlock Action Bar) - 将下拉微调器一直定位到右侧

c# - 我怎样才能将其重构为更易于管理的代码?

Android:加载应用程序时填充默认操作栏

android - ConstraintLayout 具有可绘制图像和不同文本的 TextView 的高度和宽度相等

java - 如何在 `Fragment` 中以编程方式更改屏幕亮度

Android Media Codec 视频解码

php - Laravel:从json类型字符串访问键值