I have created a demo to upload more than two images using PHP. See code below.
Go step by step
Step 1
1) Main Activity with two ImageView
s and set image from drawable folder
2) Change URL
3) getStringImage()
is used to convert Bitmap to String (you can check in the log)
4) Upload using Volley library.
public class MainActivity extends AppCompatActivity {
ImageView imageView1, imageView2;
Button uploadImage;
String URL = "http://192.168.1.85/DemoUploadTwoImage/post.php/";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// XML Declaration
imageView1 = (ImageView) findViewById(R.id.mimageView);
imageView2 = (ImageView) findViewById(R.id.mimageView1);
uploadImage = (Button) findViewById(R.id.mButton);
// XML Set Images To ImageView
imageView1.setImageResource(R.drawable.loading2);
imageView2.setImageResource(R.drawable.loading1);
uploadImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
UploadTwoImages();
}
});
}
public String getStringImage(Bitmap bmp) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] imageBytes = baos.toByteArray();
String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
return encodedImage;
}
public void UploadTwoImages() {
imageView1.buildDrawingCache();
imageView2.buildDrawingCache();
Bitmap bitmap1 = imageView1.getDrawingCache();
Bitmap bitmap2 = imageView2.getDrawingCache();
final String imageOne = getStringImage(bitmap1);
final String imageTwo = getStringImage(bitmap2);
Log.e("Image One", imageOne);
Log.e("Image Twol", imageTwo);
final ProgressDialog pDialog = new ProgressDialog(this);
pDialog.setMessage("Registration is in Process Please wait...");
pDialog.show();
StringRequest stringRequest = new StringRequest(Request.Method.POST,
URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
pDialog.hide();
String result = response;
Log.e("Result", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("Error", error.getMessage());
pDialog.hide();
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("getdata", "UploadImage");
params.put("insert_image_one", imageOne);
params.put("insert_image_two", imageTwo);
//Bank Information
return params;
}
};
//Adding request to request queue
VolleyAppController.getInstance().addToRequestQueue(stringRequest);
}
}
Step 2
XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<ImageView
android:id="@+id/mimageView"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_gravity="center" />
<ImageView
android:id="@+id/mimageView1"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_gravity="center"
android:layout_margin="10dp" />
<Button
android:id="@+id/mButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="UploadImage"
android:textSize="20dp" />
</LinearLayout>
Step 3
manifest File
1) Focus on this line: android:name=".VolleyAppController"
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jmtechnologies.uploadmultipleimagevolley">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name=".VolleyAppController"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Step 4
1) Add VolleyAppController
. This is the class file for Volley.
public class VolleyAppController extends Application {
// this methode is for multidex install For Map and google Api
public static final String TAG = VolleyAppController.class
.getSimpleName();
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
private static VolleyAppController mInstance;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
}
public static synchronized VolleyAppController getInstance() {
return mInstance;
}
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(getApplicationContext());
}
return mRequestQueue;
}
public ImageLoader getImageLoader() {
getRequestQueue();
if (mImageLoader == null) {
mImageLoader = new ImageLoader(this.mRequestQueue,
new LruBitmapCache());
}
return this.mImageLoader;
}
public <T> void addToRequestQueue(Request<T> req, String tag) {
// set the default tag if tag is empty
req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
getRequestQueue().add(req);
}
public <T> void addToRequestQueue(Request<T> req) {
req.setTag(TAG);
getRequestQueue().add(req);
}
public void cancelPendingRequests(Object tag) {
if (mRequestQueue != null) {
mRequestQueue.cancelAll(tag);
}
}
}
Step 5
1) Add LruBitmapCache
class file.
2) Not mandatory.
public class LruBitmapCache extends LruCache<String, Bitmap> implements
ImageLoader.ImageCache {
public static int getDefaultLruCacheSize() {
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
final int cacheSize = maxMemory / 8;
return cacheSize;
}
public LruBitmapCache() {
this(getDefaultLruCacheSize());
}
public LruBitmapCache(int sizeInKiloBytes) {
super(sizeInKiloBytes);
}
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight() / 1024;
}
@Override
public Bitmap getBitmap(String url) {
return get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
put(url, bitmap);
}
}
7) Server side files db_connect.php
<?php
define('HOST','localhost');
define('USER','root');
define('PASS','Root@123');
define('DB','uploadTwoImages');
$con = mysqli_connect(HOST,USER,PASS,DB) or die('Unable to Connect');
?>
8) server side files post.php
<?php
include 'db_connect.php';
$datetime = date('d/m/Y');
$request=$_REQUEST['getdata'];
// customer Registration form
if($request=="UploadImage")
{
//mysqli_set_charset( $con, 'utf8');
$image1 =$_REQUEST['insert_image_one'];
$image2 =$_REQUEST['insert_image_two'];
$imageName1="image1.jpg";
$imageName2="image2.jpg";
$Image1_path = "Uploads/$imageName1";
$Image2_path = "Uploads/$imageName2";
$actualpath = "http://192.168.1.85/DemoUploadTwoImage/$Image1_path";
$actualpath1 = "http://192.168.1.85/DemoUploadTwoImage/$Image2_path";
$m=mysqli_query($con,"INSERT INTO `UserImage`(`imageOne`, `imageTwo`) VALUES ('$actualpath','$actualpath1')");
if($m)
{
file_put_contents($Image1_path,base64_decode($image1));
file_put_contents($Image2_path,base64_decode($image2));
$flag['Code']='Data Inserted';
}
print(json_encode($flag));
}
else
{
$flag['Error']='2';
print(json_encode($flag));
}
?>
9)
10)