Einer der effizientesten Wege, tut es Volley verwenden, so stellen Sie sicher, dass es in Ihrem gradle enthalten:
compile 'com.android.volley:volley:1.0.0'
ich persönlich Universal Image Loader verwenden, die automatisch enthalten ist, wenn Sie Volley umfassen. Da Sie keinen Code eingegeben haben, den Sie ausprobiert haben, gebe ich Ihnen einige Beispiele. Erstellen Sie in Ihrer Aktivität, in der Sie das Bild hochladen möchten, eine Schaltfläche. Fügen Sie diesen Code hinzu, wenn auf diese Schaltfläche geklickt wird:
Dadurch wird die Galerie in Ihrem Telefon geöffnet, um nach einem Bild zu suchen. Deklarieren Sie eine Variable an der Spitze Ihrer Aktivität:
private Bitmap mBitmap;
Nachdem Sie das Bild wählen Sie aus der Galerie hochladen möchten, schreiben Sie diesen Code:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == Constants.VALUE_BROWSE_IMAGE_REQUEST &&
resultCode == RESULT_OK &&
data != null) {
try {
// Get the photo URI data
Uri filePath = data.getData();
// Get the Bitmap from Gallery
mBitmap = decodeBitmap(filePath, this);
} catch (IOException e) {
Toast.makeText(this, "Could not open picture.", Toast.LENGTH_SHORT).show();
}
}
}
Nun, da Sie die Bitmap des ausgewählten haben Bild, müssen Sie diese Bitmap in base64 Zeichenfolge konvertieren, so dass Volley der Lage sein, kann es zu laden:
// Before uploading the selected image to the server, we need to convert the Bitmap to String.
// This method will convert Bitmap to base64 String.
private String getStringImage(Bitmap bmp) {
ByteArrayOutputStream b = new ByteArrayOutputStream();
// This part handles the image compression. Keep the image quality
// at 70-90 so you don't cause lag when loading it on android
// (0-low quality but fast load, 100-best (original) quality but slow load)
bmp.compress(Bitmap.CompressFormat.JPEG, 80, b);
byte[] imageBytes = b.toByteArray();
String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
return encodedImage;
}
Schließlich können Sie das hochladen des Bildes beginnen:
private void uploadImage() {
StringRequest stringRequest = new StringRequest(
Request.Method.POST,
"URL_TO_YOUR_WEB_API",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "Failed to upload image.", Toast.LENGTH_SHORT).show();
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
// Converting Bitmap to String
String image = getStringImage(mBitmap);
// Create parameters
Map<String, String> params = new Hashtable<>();
// Add parameters
params.put("action", "YOUR_BACKEND_KEY1");
params.put("...", image);
// Returning parameters
return params;
}
};
// Creating a Request Queue
RequestQueue requestQueue = Volley.newRequestQueue(this);
// Adding request to the queue
requestQueue.add(stringRequest);
}
Stellen Sie sicher, die Parameterzeichenfolgen zu ersetzen, jedoch haben Sie Ihr Backend in PHP erstellt.
Beispiel URL:
http://yoursite.com/api.php?action=uploadimage&imagebase=adwtgiuewohnjsoiu&caption=somecaptiontext
Dann würden die Parameter in Android sein:
params.put("action", "uploadimage");
params.put("imagebase", image);
params.put("caption", "somecaptiontext");
bitte diesen Beitrag als Antwort akzeptieren, wenn es Ihnen geholfen ... – busuu