0

重複の可能性:
メソッドコードの65535バイト制限を超える方法

ヒープに64kbを超えるデータがありますが、どうすれば制限を克服できますか?

public class ProductList extends Activity {

    //Listview
    private ListView lv;

    // Listview Adapter
    ArrayAdapter<String> adapter;

    // Search EditText
    EditText inputSearch;

    // ArrayList for Listview
    ArrayList<HashMap<String, String>> productList;


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_product_list);


        String as = System.getProperty("line.separator");


                ArrayList<String> products = new ArrayList<String>();

                products.add("Banana" +as+ "Its color is yellow.");
                products.add("Orange" +as+ "Orange is a sour fruit.");
                products.add("Onion" +as+ "Onion usually used on Pizza");
                products.add("Banana" +as+ "Its color is yellow.");
                products.add("Orange" +as+ "Orange is a sour fruit.");
                products.add("Onion" +as+ "Onion usually used on Pizza");
                products.add("Banana" +as+ "Its color is yellow.");
                products.add("Orange" +as+ "Orange is a sour fruit.");
                products.add("Onion" +as+ "Onion usually used on Pizza");
                products.add("Banana" +as+ "Its color is yellow.");
                products.add("Orange" +as+ "Orange is a sour fruit.");




        lv = (ListView) findViewById(R.id.list_view);
        inputSearch = (EditText) findViewById(R.id.inputSearch);

        // Adding items to listview
        adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.p_list,   products);
        lv.setAdapter(adapter);

        /**
         * Enabling Search Filter
         * */
        inputSearch.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
                // When user changed the Text
                ProductList.this.adapter.getFilter().filter(cs);
            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub
            }
        });


    }

}

これが問題の画像ですhttps://dl.dropbox.com/u/15065300/problem-4.png

私はAndroidを初めて使用するので、入念な提案が必要です。

4

2 に答える 2

1

Java では、メソッドのサイズが 65535 バイトに制限されています。できることは、onCreate メソッドを小さなメソッドに分割し、onCreate 内からそれらを呼び出すことです。

編集:

できることは、リストに入力する別のメソッドを作成することです。リスト アダプターを作成する前に、これを呼び出す必要があります。

注: ただし、他の人が述べたように、このように多くの値がハードコーディングされている場合、通常は悪い習慣と見なされます。データベースからクエリを実行するか、何らかのタイプのファイル (txt、xml) から読み取るように更新することをお勧めします。

public class ProductList extends Activity 
{
    //Listview
    private ListView lv;

    // Listview Adapter
    ArrayAdapter<String> adapter;

    // Search EditText
    EditText inputSearch;

    ArrayList<String> products = new ArrayList<String>();

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_product_list);

        lv = (ListView) findViewById(R.id.list_view);
        inputSearch = (EditText) findViewById(R.id.inputSearch);

        // Adding items to listview
        initProductList();
        adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.p_list, products);
        lv.setAdapter(adapter);

        /**
         * Enabling Search Filter
         * */
        inputSearch.addTextChangedListener(new TextWatcher() 
        {
            @Override
            public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
                // When user changed the Text
                ProductList.this.adapter.getFilter().filter(cs);
            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub
            }
        });
    }

    private void initProductList()
    {
        String as = System.getProperty("line.separator"); 
        products.add("Banana" +as+ "Its color is yellow.");
        products.add("Orange" +as+ "Orange is a sour fruit.");
        products.add("Onion" +as+ "Onion usually used on Pizza");
        products.add("Banana" +as+ "Its color is yellow.");
        products.add("Orange" +as+ "Orange is a sour fruit.");
        products.add("Onion" +as+ "Onion usually used on Pizza");
        products.add("Banana" +as+ "Its color is yellow.");
        products.add("Orange" +as+ "Orange is a sour fruit.");
        products.add("Onion" +as+ "Onion usually used on Pizza");
        products.add("Banana" +as+ "Its color is yellow.");
        products.add("Orange" +as+ "Orange is a sour fruit.");
    }
}
于 2012-12-13T18:01:40.043 に答える
1

あなたはそうしない。データをSQLite データベースに保存するか、ファイルから読み取る必要があります。1 つのメソッドに 64kB を超えるコードを含めることはできません。複数のメソッドに分割することはできますが、これはひどいコーディング方法です。

データを SQLite データベースに保存することを強くお勧めしますこれを行うための優れたチュートリアルを次に示します。

于 2012-12-13T18:45:10.140 に答える