У меня просто была путаница в том, как пользователь может выбрать фотографию из файловой памяти и установить ее в качестве фотографии профиля, а в фоновом режиме фотография должна быть отправлена на сервер. До сих пор я не мог дать Пользователь выбирает опцию и затем устанавливает эту фотографию в профильном изображении, но я все еще не знаю, что мне отправить на сервер, я не знаю, какой API мне нужен и какой формат подходит для этого.
мой текущий код:
playerImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent galleryintent = new Intent(Intent.ACTION_PICK,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
galleryintent.setType("image/*");
galleryintent.putExtra("aspectX", 1);
galleryintent.putExtra("aspectY", 1);
galleryintent.putExtra("scale", true);
galleryintent.putExtra("outputFormat",
Bitmap.CompressFormat.JPEG.toString());
startActivityForResult(galleryintent, i);
}
});
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == i && resultCode == RESULT_OK && data != null) {
Uri selectedImage = data.getData();
assert selectedImage != null;
Log.i("selected Image",selectedImage.toString());
Bitmap bitmap = null;
try {
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),selectedImage);
String image = getStringImage(bitmap);
Log.d("image",image);
//passing the image to volley
SendImage(image);
} catch (IOException e) {
e.printStackTrace();
}
saveImage(bitmap);
playerImage.setImageURI(selectedImage);
// playerImage.setImageBitmap();
pathToImage = selectedImage.getPath();
//stuff to do on click button upload cover??
}
}
public String getStringImage(Bitmap bmp) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] imageBytes = baos.toByteArray();
return Base64.encodeToString(imageBytes, Base64.DEFAULT);
}
public static void saveImage(Bitmap bitmap) {
OutputStream output;
String recentImageInCache;
File filepath = Environment.getExternalStorageDirectory();
// Create a new folder in SD Card
File dir = new File(filepath.getAbsolutePath()
+ "/YOUR_APP/profile");
dir.mkdirs();
// Create a name for the saved image
File file = new File(dir, username+".jpg");
try {
output = new FileOutputStream(file);
// Compress into png format image from 0% - 100%
bitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
output.flush();
output.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Это где у меня нет никакой подсказки
private void SendImage( final String image) {
final ProgressDialog loading = ProgressDialog.show(Matchboard.this, "updating in...", null, true, true);
RequestQueue requestQueue= Volley.newRequestQueue(this);
String url="http://www.judgement6.com/judgement_files/profileImage.php";
final StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("uploade",response);
try {
loading.dismiss();
JSONObject jsonObject = new JSONObject(response);
Log.e("returns", String.valueOf(jsonObject));
if (jsonObject.toString().equals("image uploaded successfully")){
Toast.makeText(Matchboard.this,"image uploaded successfully",Toast.LENGTH_LONG).show();
}
} catch (JSONException e1) {
e1.printStackTrace();
}
}
}
,
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(Matchboard.this, "No internet connection", Toast.LENGTH_LONG).show();
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new Hashtable<String, String>();
params.put("image", image);
params.put("email",userEmail);
return params;
}
};
{
int socketTimeout = 30000;
RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
stringRequest.setRetryPolicy(policy);
requestQueue.add(stringRequest);
}
}
Я также хочу загружать эту фотографию с сервера каждый раз, когда пользователь входит в систему, поэтому ему не нужно устанавливать ее каждый раз.
Это мой profileIph.php
<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
require_once('connect.php');
$image=$_POST['image'];
$email=$_POST['email'];
$sql = "update users2 set profileImage='$image' where email='$email'";
if(mysqli_query($con,$sql)){
echo 'image uploaded successfully';
}
else
{
echo 'oops! Please try again!';
}
}
?>
Все, что я хочу, это вернуть изображение в виде URL-адреса, например xyz.com/image/1.png, типа вещи