Type只能迭代数组或java.lang.Iterable的实例,上传图片android

时间:2013-05-07 00:14:28

标签: android image upload java.lang.class

我是.net开发人员,我在Visual Studio工作了3-4年,但现在我的老板让我创建一些Android应用程序,所以我必须回到大学时间和练习我的Java技能(不太好)。现在,该应用程序非常简单:将图像上传到服务器,从Web应用程序查看该图像等。

现在我的问题:我一直在阅读很多关于如何做到这一点并尝试了很多教程,我终于找到了一个很好的教程。它有一个我修改过的上传类,但我一直收到这个错误:

#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 个答案:

答案 0 :(得分:0)

在Java中,你不能迭代这样的字符串,这就是你得到编译时错误的原因。

doInBackground()的方法定义应使用varargs(省略号)

protected String doInBackground(String... path) {

这正是您的重写方法所使用的内容。访问时,varargs相当于一个数组。

此外,请确保参数化AsyncTask以避免编译器警告。

如果您确实希望迭代1个字符串(通过其字符),您可以执行以下操作:

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

或者使用简单的for循环,调用String#charAt([place])