2014-02-23 45 views
0
public void onClick(View v) { 
    //this contains 4,095 if conditions 
} 

代碼不可執行,因爲它說:如何解決Android的錯誤,說的onClick超過65535個字節限制

Multiple markers at this line 
-implements android.view.View.OnClickListener.onClick 
-The code of method onClick(View) is exceeding the 65535 bytes limit 

誰能幫我解決這個嗎?因爲我實際上需要那些4,095條件,如果我的代碼。

+0

我敢肯定有比4095 ifs更好的方法。如果你發佈了一些代碼,我們可能會給你一些想法,如何以不同的方式實現它。如果這不是你想要的將代碼分割成幾種方法? –

+0

是的,正是我想要的..將代碼分成兩部分,但仍然使用1個按鈕.. @Emanuel – user3322959

+0

你能告訴我們你想做什麼。如果我們可以優化if語句,我們可以提供幫助 – Dexters

回答

2

如果你想保持4095 if語句的話我會做這樣的事情:

@Override 
    public void onClick(View v) { 
     if (! processPart1(v)) { 
      processPart2(v); 
     } 
    } 

    private boolean processPart1(View v) { 
     if (q1.isChecked() && !q2.isChecked() && !q3.isChecked() && !q4.isChecked() && !q5.isChecked() && !q6.isChecked() && !q7.isChecked() && !q8.isChecked() && !q9.isChecked() && !q10.isChecked() && !q11.isChecked() && !q12.isChecked()) { 
      // do your thing 
      return true; 
     } 
     else if (!q1.isChecked() && q2.isChecked() && !q3.isChecked() && !q4.isChecked() && !q5.isChecked() && !q6.isChecked() && !q7.isChecked() && !q8.isChecked() && !q9.isChecked() && !q10.isChecked() && !q11.isChecked() && !q12.isChecked()) { 
      // do your thing 
      return true; 
     } 
     // more conditions here... 
     return false; 
    } 

    private void processPart2(View v) { 
     // more conditions 
    } 

但是你可以實現這個更快,也更容易模塊化:

boolean q[] = {q1.isChecked(), q2.isChecked(), q3.isChecked(), 
        q4.isChecked(), q5.isChecked(), q6.isChecked(), 
        q7.isChecked(), q8.isChecked(), q9.isChecked(), 
        q10.isChecked(), q11.isChecked(), q12.isChecked()}; 
    int value = 0; 
    for (int i = 0, len = q.length; i < len; i++) { 
     value += (q[i] ? 1 : 0) << i; 
    } 

    switch(value) { 
    case 0: // do your thing 
    case 1: // do your thing 
    case 2: // do your thing 
    // more case statements ... 
    } 

雖然您的代碼必須經過2048年if語句平均上面的代碼只處理12個值,然後直接跳轉到正確的case語句。它也更不容易出錯,並可以像這樣輕鬆地拆分成不同的方法:

processValues0To1023(value); 
processValues1024To2047(value); 
processValues2048To3071(value); 
processValues3072To4095(value); 

private void processValues0To1023(int value) { 
    switch(value) { 
    case 0: // do your thing 
    // more case statements ... 
    } 
} 

private void processValues1024To2047(int value) { 
    switch(value) { 
    case 1024: // do your thing 
    // more case statements ... 
    } 
} 

private void processValues2048To3071(int value) { 
    // ditto 
} 

private void processValues3072To4095(int value) { 
    // ditto 
} 
+0

如何添加另一個2進程。所以總共有4個過程..你可以給我看句法。?謝謝你.. @Emanuel – user3322959

+0

我擴展了這個例子,有4個方法 –

相關問題