Получить данные из Json Array для кнопок в Java, используя (для) статистику - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь получить две строки (заголовок и ссылку) из Json Array by (for) и создать новые кнопки так, чтобы:

Строка заголовка будет текстом кнопки И каждый Кнопка приведет пользователя к его собственной ссылке.

Мне удалось создать код java, и он запускается Но все кнопки ведут пользователя к одной и той же ссылке (первая ссылка).

Вот мой код:

public void fetchar() {

    String zi = "";

    try{

        jarry=new JSONArray(jsonstring);

        for (int k=0;k<jas.length();k++) {

            jsn = jas.getJSONObject(k);

            Button nb = new Button(this);

            nb.setText(jsn.getString("title"));

            nb.setId(k);

            nb.setBackgroundResource(R.drawable.feld); 

            nb.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                    try{
                        loadthis(jsn.getString("link")); 
                    } catch(Exception e){}
                }

            });

        space.addView(nb);
    }

    dial.dismiss();

    }
    catch(Exception e) {}
}
public void loadthis(String urk) {
    try{
        if (newString.equals("facebook")) {
            urk="fb://facewebmodal/f?href="+urk;
        } else if (newString.equals("youtube")) {
            urk="vnd.youtube:"+urk;
        }

        Intent goi=new Intent(Intent.ACTION_VIEW,Uri.parse(urk)); 
        startActivity(goi); 

    } catch(Exception e){}
}

Я определил все переменные в первом из java файла

Как я могу сделать одинаковые изменения среди моих новые кнопки?

Ответы [ 2 ]

1 голос
/ 18 апреля 2020

Проблема в том, что вы сохраняете JsonObject как переменную класса. Изменение его на локальную переменную решит вашу проблему. Я немного изменил ваш код:

public void fetchar() {

    String zi = "";

    try{

        JSONArray jarry = new JSONArray(jsonstring);

        for (int k=0; k < jarry.length(); k++) {

            JSONObject jsonObject = jarry.getJSONObject(k);

            Button button = new Button(this);

            button.setText(jsonObject.getString("title"));

            button.setId(k);

            button.setBackgroundResource(R.drawable.feld); 

            button.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                    try{
                        loadthis(jsonObject.getString("link")); 
                    } catch(Exception e){}
                }

            });

            space.addView(button);
        }

        dial.dismiss();

    } catch(Exception e) {}
}

Кстати: попробуйте использовать более четкие имена переменных в вашем коде. Это действительно помогает понять код позже.

0 голосов
/ 18 апреля 2020

Используйте метод setTag () для кнопки, чтобы установить ссылку в качестве тега для каждой кнопки. После вызова setId () setTag(jsn.getString("link"))

И в обработчике событий измените ваш код, как показано ниже.

public void onClick(View v) {
    try{
       String link = String.valueOf(v.getTag); 
       loadthis(link);
    }catch(Exception e){}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...