У меня есть три вида списка в активности А, как показано нижеСохранение несколько изображений в тузде PHP от андроида, но только один образом вставляется
При отправке button
нажатии, текст и изображений путь будет сохранен в MySQL
, а image
будет храниться в папке PhotoUpload
.
Я могу хранить 3 текста в MySQL, но проблема в том, что только один путь изображения сохраняется в MySQL. Между тем, изображение должно сохранять внутри PhotoUpload, но оно просто сохраняется за пределами папки!
Это полностью расстраивает!
активность
public void uploadImageAndText(ArrayList<ImageAndText> listItems, final String id) { // Assume id holds value 2 (ts_id)
JSONArray jsonArray = new JSONArray();
try {
for (ImageAndText i : listItems) {
JSONObject object = new JSONObject();
String type = i.getType();
String[] Type = type.split(":");
object.put("type", Type[1]);
Toast.makeText(getApplicationContext(), Type[1], Toast.LENGTH_LONG).show();
String amount = i.getAmount();
String[] Amount = amount.split(":");
object.put("amount", Amount[1]);
String description = i.getDescription();
String[] Description = description.split(":");
object.put("description", Description[1]);
Uri uploadImage = i.getImage();
Log.e("Image",uploadImage+"");
object.put("image", uploadImage.toString());
object.put("ts_id", id);
jsonArray.put(object);
}
} catch (JSONException e) {
e.printStackTrace();
}
AddStaff ru = new AddStaff(jsonArray);
ru.execute();
}
class AddStaff extends AsyncTask<String, Void, String> {
ProgressDialog loading;
JSONArray jsonArray;
AddStaff(JSONArray jsonArray) {
this.jsonArray = jsonArray;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
loading = ProgressDialog.show(AddClaims.this, "Please Wait", null, true, true);
}
@Override
protected String doInBackground(String... params) {
for (int index = 0; index < jsonArray.length(); index++) {
try {
JSONObject jsonObject = jsonArray.getJSONObject(index);
String strUri = jsonObject.getString("image");
HashMap<String, String> data = new HashMap<String, String>();
data.put("listItems", jsonArray.toString());
data.put(Configs.KEY_IMAGE, getStringImage(Uri.parse(strUri)));
Log.e("AAA",jsonArray.toString());
Log.e("String",getStringImage(Uri.parse(strUri)));
RequestHandler rh = new RequestHandler();
String result = rh.sendPostRequest(Configs.STAFF_BENEFIT, data);
return result;
} catch (Exception e) {
}
}
return "";
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
loading.dismiss();
Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show();
}
}
public String getStringImage(Uri imgUri) {
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), imgUri);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] imageBytes = baos.toByteArray();
String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
return encodedImage;
} catch (Exception e) {
}
return "";
}
}
staffBenefit.php
<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
if(!empty($_POST['listItems'])){
$mysqli = new mysqli("127.0.0.1:3307", "root", "", "androiddb");
if($mysqli->connect_errno) echo "Failed to connect to MySQL";
$image = $_POST['image'];
$listItems = json_decode($_POST['listItems'], true);
$sql="SELECT id FROM staff_benefit ORDER BY id ASC";
$id=1;
$res=$mysqli->query($sql);
while($rs=$res->fetch_object()) $id=$rs->id;
$path=time()."$id.png";
$actualpath="http://192.168.107.115:80/Android/CRUD/PhotoUpload/$path";
$sql="INSERT INTO `staff_benefit` (`type`, `amount`, `description`, `image`, `ts_id`) VALUES (?, ?, ?, ?, ?)";
$stmt=$mysqli->prepare($sql);
$pathelements=array(realpath($_SERVER['DOCUMENT_ROOT']), 'CRUD', 'PhotoUpload', '');
$savepath = realpath(implode(DIRECTORY_SEPARATOR, $pathelements)) . "{$id}.png";
$bytes=file_put_contents($savepath, base64_decode($image));
if(!$bytes){
echo 'Error saving image';
}
if ($stmt && $bytes) {
foreach($listItems as $item){
$stmt->bind_param('sssss', $item['type'], $item['amount'], $item['description'], $actualpath, $item['ts_id']);
$res=$stmt->execute();
if(!$res) echo 'Query failed with code: '.$stmt->errno;
}
}
$mysqli->close();
}
}
?>
Выходной
Я проверяю путь изображения, и три из них одинаковы! И только одно изображение (2.png) сохраняются, и он находится вне PhotoUpload, а не внутри :(
путь проблема? Проблема Java? Или проблема PHP ???
Edited (PHP)
<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
if(!empty($_POST['listItems'])){
$mysqli = new mysqli("127.0.0.1:3307", "root", "", "androiddb");
if($mysqli->connect_errno) echo "Failed to connect to MySQL";
$listItems = json_decode($_POST['listItems'], true);
$sql="SELECT id FROM staff_benefit ORDER BY id ASC";
$id=1;
$res=$mysqli->query($sql);
while($rs=$res->fetch_object()) $id=$rs->id;
$sql="INSERT INTO `staff_benefit` (`type`, `amount`, `description`, `image`, `ts_id`) VALUES (?, ?, ?, ?, ?)";
$stmt=$mysqli->prepare($sql);
$pathelements=array(realpath($_SERVER['DOCUMENT_ROOT']), 'CRUD', 'UploadPhoto', '');
$savepath = realpath(implode(DIRECTORY_SEPARATOR, $pathelements)) . "{$id}.png";
foreach($listItems as $item){
$path=time()."$id.png";
$actualpath="http://192.168.107.115:80/Android/CRUD/PhotoUpload/$path";
$bytes=file_put_contents($savepath, base64_decode($item['image']));
if(!$bytes){
echo 'Error saving image';
}else{
$stmt->bind_param('sssss',
$item['type'],
$item['amount'],
$item['description'],
$actualpath,
$item['ts_id']);
$res=$stmt->execute();
if(!$res) echo 'Query failed with code: '.$stmt->errno;
}
}
}
$mysqli->close();
}
?>
Путь
C:\xampp\htdocs\Android\CRUD\UploadPhoto
я запуталась .. а) вы загружаете 1 изображение, и он будет ссылаться на это в 3 отдельных строк в базе данных? б) или вы загружаете 3 изображения, и вы хотите, чтобы их было 3 отдельно для каждого изображения? – Clay
@ChrisBanks У меня есть 3 списка в моем спискеView. При нажатии кнопки отправки они предполагают, что они будут сохранены в MySQL. Я загружаю 3 изображения, но только один путь и изображение изображения (первое изображение) сохраняются – Tony
@ChrisBanks это b – Tony