В настоящее время я пытаюсь внедрить систему изображений профиля, однако она не работает вообще. Я уверен, что проблема заключается в скрипте php, который я использую. Я хочу подчеркнуть, что все мои другие скрипты php работают, поэтому скрипты для добавления пользователя, получения пользовательских данных и даже для получения изображения профиля. Я понятия не имею, что это может быть, поэтому я включаю и исходный код приложения. Если я попытаюсь отправить сообщение в php-файл, я всегда получаю 404, а не только в приложении, поэтому это должны быть скрипты php, но я понятия не имею, что может быть проблемой здесь. Процесс записи загрузок, но с использованием InputStreamReader просто не будет работать. Я действительно надеюсь, что кто-то может мне помочь, ни одно из решений, предложенных в отношении этого вопроса, похоже, не сократит его для меня.Android Java/PHP Загрузка изображения 404
Вызов Async Задача:
Uri filePath = data.getData();
Log.d("debugshit", "in if statement pic change");
try {
final Bitmap profilePic = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
ServerRequest sr = new ServerRequest(this, "Updating Profile...");
sr.updateProfilePic(activeUser, profilePic, new ServerCallback() {
@Override
public void done(User returnedUser) {
}
@Override
public void done(boolean success) {
if (success) {
((ImageView)header.findViewById(R.id.navProfileImage)).setImageBitmap(profilePic);
Toast.makeText(MainActivity.this, "Profile Picture updated", Toast.LENGTH_SHORT).show();
}
}
});
}
catch (IOException e) {
e.printStackTrace();
}
Сервер класса Request:
public void updateProfilePic(User user, Bitmap profilePic, ServerCallback callback) {
progressDialog.show();
new UpdateProfilePicTask(user, profilePic, callback).execute();
}
public class UpdateProfilePicTask extends AsyncTask<Void, Void, Boolean> {
User user;
Bitmap profilePic;
ServerCallback callback;
public UpdateProfilePicTask(User user, Bitmap profilePic, ServerCallback callback) {
this.user = user;
this.profilePic = profilePic;
this.callback = callback;
}
@Override
protected Boolean doInBackground(Void... params) {
try {
URL url = new URL("http://server/set_profilepic.php");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setDoOutput(true);
con.setDoInput(true);
OutputStream os = con.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");
ContentValues contentValues = new ContentValues();
contentValues.put("id", user.getId());
contentValues.put("img_name", user.getUsername() + "_" + Calendar.getInstance().getTimeInMillis() + ".png");
contentValues.put("encoded_img", encodeImage(profilePic));
Log.d("debugshit", encodeParams(contentValues));
con.connect();
osw.write(encodeParams(contentValues));
osw.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
String response = br.readLine();
Log.d("debugshit", response);
br.close();
osw.close();
os.close();
con.disconnect();
return response.equals("OK");
}
catch (Exception e) {
e.printStackTrace();
}
return false;
}
@Override
protected void onPostExecute(Boolean success) {
progressDialog.dismiss();
callback.done(success);
super.onPostExecute(success);
}
}
private String encodeImage(Bitmap image) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
byte[] imageBytes = outputStream.toByteArray();
return Base64.encodeToString(imageBytes, Base64.DEFAULT);
}
private String encodeParams(ContentValues values) throws UnsupportedEncodingException {
StringBuilder sb = new StringBuilder();
Set<Map.Entry<String, Object>> entrySet = values.valueSet();
boolean first = true;
for(Map.Entry entry : entrySet) {
String key = entry.getKey().toString();
String value = entry.getValue().toString();
if (first)
first = false;
else
sb.append("&");
sb.append(URLEncoder.encode(key, "UTF-8"));
sb.append("=");
sb.append(URLEncoder.encode(value, "UTF-8"));
}
return sb.toString();
}
set_profilepic.php
<?php
header('Content-type: bitmap; charset=utf-8');
$id = $_POST['id'];
$imgname = $_POST['img_name'];
$img = $_POST['encoded_img'];
if (isset($imgname, $img)) {
$decodedimg = base64_decode($img);
$path = 'profile_images/' . $imgname;
$file = fopen($path, 'wb');
$written = fwrite($file, $decodedimg);
fclose($file);
if ($written > 0) {
$con = mysqli_connect("server", "user", "pw", "db");
$statement = mysqli_prepare($con, "UPDATE User SET profilepic = ? WHERE id = ? ");
mysqli_stmt_bind_param($statement, "si", $path, $id);
$success = mysqli_stmt_execute($statement);
mysqli_stmt_close($statement);
mysqli_close($con);
if ($success) {
echo "OK";
}
else {
echo "Error";
}
}
else {
echo "Error";
}
}
else {
echo "Error";
}
?>
где находится ваш сервер. На вашем компьютере или на удаленном месте? –
'Я всегда получаю 404, а не только в приложении, поэтому это должны быть скрипты php. Неверный вывод. Теперь что значит 404? – greenapps
@greenapps Я знаю, что означает 404, но когда я иду на страницу, эта ошибка не возникает и скрипт выполняется. – user3002449