как передать аргумент в postDelay () внутри цикла FOR - PullRequest
0 голосов
/ 05 марта 2019

Я хочу представить функцию postDelayed () внутри моего цикла FOR, но компилятор больше не распознает следующие переменные: Jarray, i, getString ()

...
JSONObject result1 = new JSONObject(result);
            JSONArray jArray = result1.getJSONArray("doc");

            for (int i=0; i < jArray.length(); i++) {


                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {

                        SmsManager smsManager = SmsManager.getDefault();
                        int length = message.length();

                        if (length > MAX_SMS_MESSAGE_LENGTH) {
                            ArrayList<String> messagelist = smsManager.divideMessage(message);
                            smsManager.sendMultipartTextMessage("+3311111111", null, messagelist, null, null);
                        } else {
                            smsManager.sendTextMessage("+331111111", null, message, null, null);
                        }


                        JSONObject json_data = jArray.getJSONObject(i); //here 3 errors: error: local variable jArray is accessed from within inner class; needs to be declared final / error: unreported exception JSONException; must be caught or declared to be thrown / error: local variable i is accessed from within inner class; needs to be declared final

...

                        Toast.makeText(activity, "Envoi du doc " + json_data.getString("doc_title"), Toast.LENGTH_LONG).show(); // here, error: unreported exception JSONException; must be caught or declared to be thrown
                    }
                }, 30000);

            }

thank's!

1 Ответ

0 голосов
/ 05 марта 2019

Выпуск 1

Невозможно использовать конечную переменную в цикле.Вы можете сделать это, как показано ниже

for (int i=0; i < jArray.length(); i++) {
    final int index = i;

Теперь используйте index везде, где вам нужно i.

Выпуск 2

Любойпеременная, к которой вы обращаетесь внутри внутреннего / анонимного класса, должна быть конечной.Таким образом, jArray должен быть окончательным, как это.

final JSONArray jArray = result1.getJSONArray("doc");

Выпуск 3

Когда вы выполняете какую-либо операцию JSON, вам нужно обрабатывать подобные исключения

try{
    // Do your operation here like 
    JSONObject json_data = jArray.getJSONObject(i);
}
catch(JSONException jse){
    jse.printStackTrace();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...