简体   繁体   中英

Android : Cannot insert values to database

I want to insert into my phpMyAdmin database the path of a video and its thumbnail both as Strings. The problem is that these values are not stored in my database and I keep getting "success":"0","message":"Required field(s) is missing". Do you have any ideas why this happens?

Here is the code i use

Android:

public class UploadActivity extends Activity {
        // LogCat tag
        private static final String TAG = MainActivity.class.getSimpleName();
        InputStream is =null;
        private ProgressBar progressBar;
        private String filePath = null;
        public String serverPath;
        private TextView txtPercentage;
        SQLiteDatabase db;
        private VideoView vidPreview;
        private Button btnUpload;
        long totalSize = 0;
        String thumb2string;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_upload);
            txtPercentage = (TextView) findViewById(R.id.txtPercentage);
            btnUpload = (Button) findViewById(R.id.btnUpload);
            progressBar = (ProgressBar) findViewById(R.id.progressBar);

            vidPreview = (VideoView) findViewById(R.id.videoPreview);
            // Receiving the data from previous activity
            Intent i = getIntent();

            // video path that is captured in previous activity
            filePath = i.getStringExtra("filePath");
            serverPath = i.getStringExtra("serverPath");


            if (filePath != null) {
                // Displaying video on the screen
                previewMedia();
            } else {
                Toast.makeText(getApplicationContext(),
                        "Sorry, file path is missing!", Toast.LENGTH_LONG).show();
            }

            btnUpload.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // uploading the file to server
                    new UploadFileToServer().execute();
                }
            });

        }

        /**
         * Displaying captured image/video on the screen
         * */
        private void previewMedia() {


                vidPreview.setVisibility(View.VISIBLE);
                vidPreview.setVideoPath(filePath);

                // start playing
                vidPreview.start();

        }

        /**
         * Uploading the file to server
         * */
        public class UploadFileToServer extends AsyncTask<Void, Integer, String> {
            @Override
            protected void onPreExecute() {
                // setting progress bar to zero
                progressBar.setProgress(0);
                super.onPreExecute();
            }

            @Override
            protected void onProgressUpdate(Integer... progress) {
                // Making progress bar visible
                progressBar.setVisibility(View.VISIBLE);

                // updating progress bar value
                progressBar.setProgress(progress[0]);

                // updating percentage value
                txtPercentage.setText(String.valueOf(progress[0]) + "%");
            }

            @Override
            protected String doInBackground(Void... params) {
                return uploadFile();
            }

            @SuppressWarnings("deprecation")
            public String uploadFile() {
                String responseString = null;

                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost(Config.FILE_UPLOAD_URL);

                try {

                    AndroidMultiPartEntity entity = new AndroidMultiPartEntity(
                            new AndroidMultiPartEntity.ProgressListener() {

                                @Override
                                public void transferred(long num) {
                                    publishProgress((int) ((num / (float) totalSize) * 100));
                                }
                            });
                    File sourceFile = new File(filePath);

                    // Adding file data to http body
                    entity.addPart("video", new FileBody(sourceFile));
                    totalSize = entity.getContentLength();
                    httppost.setEntity(entity);

                    // Making server call
                    HttpResponse response = httpclient.execute(httppost);
                    HttpEntity r_entity = response.getEntity();

                    int statusCode = response.getStatusLine().getStatusCode();
                    if (statusCode == 200) {
                        // Server response
                        Bitmap thumb = ThumbnailUtils.createVideoThumbnail(filePath,
                                MediaStore.Images.Thumbnails.MINI_KIND);
                        ByteArrayOutputStream stream = new ByteArrayOutputStream();
                        thumb.compress(Bitmap.CompressFormat.JPEG, 100, stream);
                        byte[] thumbnailBitmapBytes = stream.toByteArray();
                        thumb2string = new String(thumbnailBitmapBytes);
                        /*db=openOrCreateDatabase("TwentyThree", Context.MODE_PRIVATE, null);

                        SQLiteStatement stmt = db.compileStatement("INSERT INTO videos (path, thumbnail) values (?, ?)");
                        stmt.bindString(1, serverPath);
                        stmt.bindBlob(2, thumbnailBitmapBytes);
                        stmt.executeInsert();*/
                        insertInto();

                        responseString = EntityUtils.toString(r_entity);
                    } else {
                        responseString = "Error occurred! Http Status Code: "
                                + statusCode;
                    }

                } catch (ClientProtocolException e) {
                    responseString = e.toString();
                } catch (IOException e) {
                    responseString = e.toString();
                }

                return responseString;

            }

            private void insertInto() throws IOException {
                List<NameValuePair> params = new ArrayList<NameValuePair>();

                params.add(new BasicNameValuePair("Path", "serverPath"));
                params.add(new BasicNameValuePair("Thumbnail", "thumb2string"));

                try{
                   HttpClient httpClient = new DefaultHttpClient();
                   HttpPost httpPost = new HttpPost("http://192.168.1.96:80/DBscripts/insertdb.php");
                   httpPost.setEntity(new UrlEncodedFormEntity(params));
                   HttpResponse response = httpClient.execute(httpPost);
                   HttpEntity entity = response.getEntity();

                   is = entity.getContent();
                }catch(ClientProtocolException e){
                    Log.e("ClientProtocol", "Log_tag");
                    e.printStackTrace();
                }
            }

            @Override
            protected void onPostExecute(String result) {
                Log.e(TAG, "Response from server: " + result);

                // showing the server response in an alert dialog
                showAlert(result);

                super.onPostExecute(result);
            }

        }

        /**
         * Method to show alert dialog
         * */
        private void showAlert(String message) {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage(message).setTitle("Response from Servers")
                    .setCancelable(false)
                    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            UploadActivity.this.finish();
                        }
                    });
            AlertDialog alert = builder.create();
            alert.show();
        }

    }

PHP script :

<?php

$con = mysqli_connect('127.0.0.1','root','pswd');
mysqli_select_db($con,"twentythree");

if (isset($_POST['Path']) && isset($_POST['Thumbnail'])) {
$path =$_POST['Path'];
$thumb =$_POST['Thumbnail'];

$query = "INSERT INTO videos(Path, Thumbnail) VALUES('".$path."','".$thumb."')";
// mysql inserting a new row
mysqli_query($con,$query);


}else{
// required field is missing
    $response["success"] = 0;
    $response["message"] = "Required field(s) is missing";

    // echoing JSON response
    echo json_encode($response);

}
?>

I managed to find the solution. The problem was at the way I used to encode the byte array to string. So instead of using thumb2string = new String(thumbnailBitmapBytes); I used Base64 encoding : thumb2string = Base64.encodeToString(thumbnailBitmapBytes, Base64.DEFAULT);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM