【问题标题】:Upload image from ImageView with String values using AsyncTask使用 AsyncTask 从 ImageView 上传带有字符串值的图像
【发布时间】:2017-08-10 18:19:39
【问题描述】:

我有一个注册表。除了名字、姓氏和用户名等用户信息,我希望用户上传图片。

目前,我已经设法使用相机将图像缩略图加载到 ImageView 中并显示在 View 中。现在我也想上传图片。

下面是我在Register.java 中的代码,如果只有字符串,它就可以正常工作。

String requested_method = "register";

RegisterTask registerTask = new RegisterTask(Register.this);
registerTask.execute(requested_method, first_name_entered, last_name_entered, username_entered);

由于我的RegisterTask.java是一个大文件,所以我这里只粘贴相关信息。

public class RegisterTask extends AsyncTask<String,Void,String> {
    Context context;

    public RegisterTask(Context ctx) {
        context = ctx;
    }

    @Override
    protected String doInBackground(String... params) {
        String register_url = "http://my_website.com/register.php";
    String requested_method = params[0];
    String first_name = params[1];
    String last_name = params[2];
    String username = params[3];

    if (requested_method.equals("register")) {
        try {
            URL url = new URL(submit_order_url);
            HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
            httpURLConnection.setRequestMethod("POST");
            httpURLConnection.setDoOutput(true);
            httpURLConnection.setDoInput(true);
            OutputStream outputStream = httpURLConnection.getOutputStream();
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream,"UTF-8"));

            String data = URLEncoder.encode("first_name","UTF-8")+"="+URLEncoder.encode(first_name,"UTF-8")+"&"
                    +URLEncoder.encode("last_name","UTF-8")+"="+URLEncoder.encode(last_name,"UTF-8")+"&"
                    +URLEncoder.encode("username","UTF-8")+"="+URLEncoder.encode(username,"UTF-8");

            bufferedWriter.write(data);
            bufferedWriter.flush();
            bufferedWriter.close();
            outputStream.close();

            InputStream inputStream = httpURLConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1"));

            String response_data = "";
            String line = "";

            while((line = bufferedReader.readLine()) != null) {
                response_data+= line;
            }

            bufferedReader.close();
            inputStream.close();
            httpURLConnection.disconnect();
            return response_data;
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

        return null;
    }
}

这段代码运行良好。

现在我要做的是,将我在 ImageView 中加载的图像添加到此 AsyncTask 并上传。如果我尝试将位图与字符串一起发送,则会出错。

我该怎么办?

【问题讨论】:

  • If I am trying to sent Bitmap along with the String, it is giving an error.。显示您的代码和确切的错误消息。什么是“字符串”?
  • 我同意你的观点,这种说法是无稽之谈。我应该在发布之前删除它。
  • Error:(287, 21) error: 类 AsyncTask 中的方法执行不能应用于给定类型;必需:String[] 找到:String,String,String,String,Bitmap 原因:可变参数不匹配;位图无法转换为字符串,其中 Params、Progress、Result 是类型变量:Params 扩展类 AsyncTask 中声明的对象 Progress 扩展类 AsyncTask 中声明的对象 结果扩展类 AsyncTask 中声明的对象
  • 在构造函数中添加位图参数。 registerTask = new RegisterTask(Register.this, bitmap);.
  • 不工作。如果我尝试将“位图”添加到构造函数但失败了。

标签: android android-asynctask image-uploading android-bitmap


【解决方案1】:

使用一个新类,将其命名为RegistrationDetails,并让它包含当前字符串以及Bitmap。只需将该类的一个实例作为唯一参数传递给AsyncTask

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    相关资源
    最近更新 更多