6

私は問題があります。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;

    }
}

あなたの助けが必要です。どうも

4

3 に答える 3

2

JSONArray オブジェクトを受け入れる ArrayAdapter にコンストラクターが見つかりません。疑問がある場合は、Array Adapterを参照してください。

JSONArray の代わりに List を渡す必要があります。また 、UI スレッドのネットワーク操作を行っているため、NetworkOnMainThread例外が発生します。下位バージョンでは問題ありませんが、上位バージョンでは例外がスローされます。AsyncTaskを使用して値または別のスレッドを取得してみてください

だから、このようなリストを取得します

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);
于 2013-03-17T14:53:47.933 に答える
1

最初の解決策

実際、JSONArray を必要とする ArrayAdapter のコンストラクターは見つかりませんでした。あなたJSONArrayがすべての文字列要素を持っている場合

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    try {
        List<String> listist = new ArrayList<String>();

        String res = callGet("http://tvapp.pcrevue.sk/categories.json");
        JSONArray jsonArray = new JSONArray(res);

        for (int i = 0; i < jsonArray.length(); i++) {
            try {
                listist.add("" + jsonArray.get(i));
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        Log.e("", "listist.size() : " + listist.size());

    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public String callGet(String urlString) {

    HttpParams params = new BasicHttpParams();
    HttpConnectionParams.setSoTimeout(params, 10000);
    HttpConnectionParams.setConnectionTimeout(params, 10000);
    HttpClient httpclient = new DefaultHttpClient(params);
    HttpGet httppost = new HttpGet(urlString);

    try {

        HttpResponse response = httpclient.execute(httppost);
        return EntityUtils.toString(response.getEntity());
    } catch (Exception e) {
        return "";
    }
}
}

logcat の出力を取得しました

03-17 21:49:36.821: E/(376): listist.size() : 10

2 番目の解決策

json 解析用にGSON libを試しましたか? JSONJava オブジェクトをその表現に変換します。

List<String> listist = new ArrayList<String>();
iidList = new Gson().fromJson(jsonArray, List.class);

ArrayAdapter<String> spinnerMenu = new ArrayAdapter<String>(
            actionBar.getThemedContext(),
            android.R.layout.simple_list_item_1, listist);
于 2013-03-17T14:53:51.957 に答える
0

スピナーは問題なく配列を受け入れます。したがって、json から Java 配列を抽出し、その配列をスピナーに渡すだけです。json を Java 配列に変換する方法については、オンラインで多くの例があります。JSON を解析してその値を配列に変換する方法 . そして、Java配列でスピナーを作成する場合: Android: 配列からプログラムでスピナーを作成する

于 2013-03-17T14:59:29.303 に答える