使用 AsyncTask 从 ImageView 上传带有字符串值的图像
Posted
技术标签:
【中文标题】使用 AsyncTask 从 ImageView 上传带有字符串值的图像【英文标题】:Upload image from ImageView with String values using AsyncTask 【发布时间】: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: 类 AsyncTaskregisterTask = new RegisterTask(Register.this, bitmap);
.
不工作。如果我尝试将“位图”添加到构造函数但失败了。
【参考方案1】:
使用一个新类,将其命名为RegistrationDetails
,并让它包含当前字符串以及Bitmap
。只需将该类的一个实例作为唯一参数传递给AsyncTask
。
【讨论】:
以上是关于使用 AsyncTask 从 ImageView 上传带有字符串值的图像的主要内容,如果未能解决你的问题,请参考以下文章
通过 AsyncTask 下载图像并将其显示在 Imageview 中而不存储在 sdcard 中
通过AsyncTask下载图像并将其显示在Imageview中而不存储在SD卡中
从OpenLibrary API在ImageView中加载图像