Как обновить ImageVIew при каждом нажатии кнопки новым изображением из Интернета? - PullRequest
0 голосов
/ 07 марта 2012

Я новичок в Android и пытаюсь создать свое первое приложение. Он должен иметь ImageView вместе с двумя кнопками (Назад и Далее). Когда пользователь нажимает кнопку «Далее», изображение в ImageView должно быть заменено следующим изображением (размещенным на моем сервере). Имена файлов: 1.jpg, 2.jpg, 3.jpg ... Я использую следующий код, но что-то не работает. Когда начинается действие, первое изображение загружается правильно, но когда я нажимаю кнопку «Далее», ничего не происходит (в LogCat также ничего не происходит).

public class slidesActivity extends Activity {

private ImageView imageView;
private int imageNumber = 1;
private String plakatiUrl = "http://plakati.bg/" + 
                                 Integer.toString(imageNumber) + ".jpg";

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.slides);

    final Drawable image = LoadImageFromWeb(plakatiUrl);
    imageView = new ImageView(getBaseContext());
    imageView = (ImageView) findViewById(R.id.imageView1);
    imageView.setImageDrawable(image);

    Button nextButton = (Button) findViewById(R.id.nextBtn);
    nextButton.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {
            imageNumber++;

            // Have to find why
            imageView.setImageDrawable(image);
            // is not working here
        }
    });

private Drawable LoadImageFromWeb(String url) {
    try {
        InputStream is = (InputStream) new URL(url).getContent();
        Drawable d = Drawable.createFromStream(is, "src name");
        return d;
    } catch (Exception e) {
        System.out.println("Exc=" + e);
        return null;
    }
}
}

Я знаю, что я должен сделать это в другой ветке, поэтому я не получаю ANR, но все же я что-то здесь упускаю. Может ли кто-нибудь помочь мне с этим, пожалуйста!

Ответы [ 2 ]

0 голосов
/ 08 марта 2012

Это работает для меня. Вы можете очистить его, хотя.

public class TestAppActivity extends Activity {

    private ImageView imageView;
    private int imageNumber = 1;
    private String plakatiUrl = "http://plakati.bg/";
    private Drawable image = null;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.slides);

        image = LoadImageFromWeb(generateUrlString(plakatiUrl, imageNumber));
        imageView = new ImageView(getBaseContext());
        imageView = (ImageView) findViewById(R.id.imageView1);
        imageView.setImageDrawable(image);

        Button nextButton = (Button) findViewById(R.id.nextBtn);
        nextButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                imageNumber++;

                image = LoadImageFromWeb(generateUrlString(plakatiUrl, imageNumber));

                imageView.setImageDrawable(image);
            }
        });

    }

    private Drawable LoadImageFromWeb(String url) {
        Drawable d = null;

        InputStream is;
        try {
            is = (InputStream) new URL(url).getContent();
            d = Drawable.createFromStream(is, "src name");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return d;
    }

    private String generateUrlString(String str, int n) {

        return str + Integer.toString(n) + ".jpg";
    }
}

Также я рекомендую использовать Bitmap вместо Drawable. И я заметил, что вы поместили метод LoadImageFromWeb() в onCreate().

0 голосов
/ 08 марта 2012

Ваш метод onClick() перезагружает одно и то же изображение при каждом нажатии. Вам нужно изменить свое изображение и его ссылку. Измените LoadImageFromWeb(String) на

LoadImageFromWeb(String url, int imageNumber) 
{
   String plakatiUrl = url + Integer.toString(imageNumber) + ".jpg";
   //...
}

И вызовите его из метода onClick().

...