我要求必须使用POST方法从数据库将用户图像下载到应用程序。在这里,我需要通过POST方法将userId
传递给PHP并获取图像作为响应。我会将此图像存储并显示在ImageView
中。我已经在iOS上完成了这项工作并且在那里工作得很好,但对于Android我需要帮助。
我已经做了很多谷歌搜索,但只找到了使用GET方法或直接URL方法下载图像但没有POST方法的教程。请使用POST方法帮助我使用任何示例代码。 我已经在ios上使用的PHP文件如下所示。
<?php
require("userdao.php");
...
$userId = htmlentities($_POST["userId"]);
$returnValue = array();
$dao = new userdao($dbhost, $dbuser, $dbpass, $dbname);
$dao->openConnection();
$userPhoto = $dao->getUserPhoto($userId);
$returnValue = $userPhoto["user_photo"];
$dao->closeConnection();
echo ($returnValue);
return;
?>
编辑:这是一些额外的信息, 使用blob将图像存储在数据库中。以上php需要userid输入&amp;从表中获取相应的图像,然后回读它。这里没有json_encode。我有这个应用程序的其他php正在执行字符串请求&amp;使用凌空和放大器获得回复多数民众赞成。但对于这个特殊的我需要图像作为响应,我无法找到可以使用POST方法发送一个参数的图像请求或位图请求的代码。获得图像响应。 这个php常用于ios&amp;机器人。我需要android的代码来使这项工作。 还有一件事,经过大量的搜索,我发布了这个问题。任何帮助表示赞赏。
答案 0 :(得分:0)
我已经完成了它,虽然不是直接但是有解决方法。我在php中将图像转换为base64字符串。在android中我使用StringRequest来POST用户ID和接收编码的字符串,然后解码字符串&amp;将它转换回图像。
PHP代码: userPhoto.php
<?php
...
$userId = htmlentities($_POST["userId"]);
...
$userImage= $userPhoto["user_photo"];
$returnValue["userIdEncoded"] = base64_encode($userImage);
...
echo json_encode($returnValue);
return;
?>
Android代码: 创建新的java文件以从数据库中获取数据:
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.toolbox.StringRequest;
import java.util.HashMap;
import java.util.Map;
public class PhotoRequest extends StringRequest {
private static final String photoRequestUrl = "http://.../php/userPhoto.php";
private Map<String, String> params;
public PhotoRequest (String userId, Response.Listener<String> listener, Response.ErrorListener errorListener){
super(Request.Method.POST, photoRequestUrl, listener, errorListener);
params = new HashMap<>();
params.put("userId", userId);
}
@Override
public Map<String, String> getParams() {
return params;
}
}
将以下代码添加到MainActivity以保存图像:
Response.Listener<String> photoResponseListener = new Response.Listener<String>() {
@Override
public void onResponse(String imageResponse) {
try {
JSONObject jsonResponse = new JSONObject(imageResponse);
final String userPhotoEncodedString = jsonResponse.getString("userIdEncoded");
final byte[] decodedString = Base64.decode(userPhotoEncodedString, Base64.DEFAULT);
Bitmap decodedImage = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
ContextWrapper cw = new ContextWrapper(getApplicationContext());
File imageDirectory = cw.getDir("imageDir", Context.MODE_PRIVATE);
boolean isDirectoryExists = imageDirectory.exists();
if (!isDirectoryExists) {
isDirectoryExists = imageDirectory.mkdir();
}
System.out.println("isDirectoryExists:" + isDirectoryExists);
File imagePath = new File(imageDirectory, "userPhoto.png");
boolean isFileExists = imagePath.exists();
if(isFileExists){
isFileExists = imagePath.delete();
}
System.out.println(isFileExists);
FileOutputStream fos;
try {
fos = new FileOutputStream(imagePath);
decodedImage.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
};
PhotoRequest photoRequest = new PhotoRequest(userId, photoResponseListener, null);
RequestQueue queue = Volley.newRequestQueue(LoginPage.this);
queue.add(photoRequest);
以下代码显示已保存文件中的图像:
final ImageView ivUserPhoto = (ImageView) findViewById(R.id.ivUserPhoto);
try {
ContextWrapper cw = new ContextWrapper(getApplicationContext());
File imageDirectory = cw.getDir("imageDir", Context.MODE_PRIVATE);
File imagePath = new File(imageDirectory, "userPhoto.png");
Bitmap userImage = BitmapFactory.decodeStream(new FileInputStream(imagePath));
ivUserPhoto.setImageBitmap(userImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
}