Тип Может перебирать только массив или экземпляр java.lang.Iterable, загрузить изображение Android

Я являюсь разработчиком.net и работаю в Visual Studio последние 3-4 года, но теперь мой начальник попросил меня создать какое-то приложение для Android, поэтому мне нужно вернуться в колледж и попрактиковаться в навыках Java. (не так хорошо). Теперь приложение очень простое: загрузить изображение на сервер, просмотреть это изображение из веб-приложения и т. Д.

Теперь мой вопрос: я много читал о том, как это сделать, и пробовал много уроков, и наконец нашел хороший. Он имеет класс загрузки, который я изменил, но я продолжаю получать эту ошибку:

#Description    Resource    Path    Location    Type Can only iterate over an array or an instance of java.lang.Iterable#

Я абсолютно не знаю, что делать, чтобы быть честным; Я искал это и нашел несколько сообщений, но ни одно из них не помогло мне решить эту проблему. Исключение отображается в этой строке: for (String sdPath : path), Вот код:

public class HttpUploader extends AsyncTask<String, Void, String> {
    protected String doInBackground(String path) {
        String outPut = null;

        for (String sdPath : path) {
            Bitmap bitmapOrg = BitmapFactory.decodeFile(sdPath);
            ByteArrayOutputStream bao = new ByteArrayOutputStream();

            //Resize the image
            double width = bitmapOrg.getWidth();
            double height = bitmapOrg.getHeight();
            double ratio = 400/width;
            int newheight = (int)(ratio*height);

            System.out.println("———-width" + width);
            System.out.println("———-height" + height);

            bitmapOrg = Bitmap.createScaledBitmap(bitmapOrg, 400, newheight, true);

            //Here you can define .PNG as well
            bitmapOrg.compress(Bitmap.CompressFormat.JPEG, 95, bao);
            byte[] ba = bao.toByteArray();
            int lol=0;
            String ba1 = Base64.encodeToString(ba,lol);

            System.out.println("uploading image now " + ba1);

            ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            nameValuePairs.add(new BasicNameValuePair("image", ba1));

            try {
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost("http://path to the image upload .php file/api.upload.php");
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();                

                // print responce
                outPut = EntityUtils.toString(entity);
                Log.i("GET RESPONSE—-", outPut);

                //is = entity.getContent();
                Log.e("log_tag ******", "good connection");

                bitmapOrg.recycle();
            }
            catch (Exception e) {
                Log.e("log_tag ******", "Error in http connection " + e.toString());
            }
        }
        return outPut;
    }

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub
        return null;
    }
}

1 ответ

В Java вы не можете перебирать такую ​​строку, вот почему вы получаете ошибку времени компиляции.

Определение метода для doInBackground() следует использовать варагс (многоточие)

protected String doInBackground(String... path) {

Именно это использует ваш пустой переопределенный метод. При обращении varargs эквивалентны массиву.

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

Если вы хотите перебрать 1 строку (через ее символы), вы можете сделать:

for (char c: path.toCharArray()){
}

Или с простым циклом для вызова String#charAt([place])

Другие вопросы по тегам