简体   繁体   中英

Value <!DOCTYPE of type java.lang.String cannot be converted to JSONObject, FATAL EXCEPTION: AsyncTask #1

I am trying to get some user inputs. More specifically, I want to get someone to enter a value as speed and when I click calculate then my if ... else if structures will calculate the resulting amount to pay as fine and display it.

Then when I click save then these input data including resulting fine should be uploaded to my SAL database.

Unfortunately when I click save i get a long list of errors... It'd be great if someone could point out what I am doing wrong so that I could learn from my mistakes. This is my first time doing this so I get a little lost here and there.

Find my Java code below:

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.ProgressDialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.ProgressDialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.os.AsyncTask
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.DatePicker;
import android.widget.TimePicker;
import android.widget.ViewSwitcher;
import android.app.Dialog;
import java.text.*;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;

import com.finecalc.library.JSONParser;
import com.finecalc.ltafinecalculator.FineCalc.CreateNewFine;

public class FineCalc extends Activity {
    private EditText speed;
    private TextView Fine;
    Button btnSelectDate,btnSelectTime;
    static final int DATE_DIALOG_ID = 0;
    static final int TIME_DIALOG_ID=1;
    public  int year,month,day,hour,minute;
    private final int mYear, mMonth, mDay,mHour,mMinute;
    // Button btnRegisterfine = (Button) findViewById(R.id.savefine);

    private ProgressDialog pDialog;

    JSONParser jsonParser = new JSONParser();
    EditText inputDriver;
    EditText inputLicence;
    EditText inputOfficer;
    EditText inputSpeed;
    EditText FineAppl;
    EditText inputCategory;
    TextView registerFine;

    // url to create new fine
    private static String url_create_fine = "http://192.168.43.183/androidltafj_api/create_fine.php";

    // JSON Node names
    private static final String TAG_SUCCESS = "success";

    public FineCalc()
    {
        // Assign current Date and Time Values to Variables
        final Calendar c = Calendar.getInstance();
        this.mYear = c.get(Calendar.YEAR);
        this.mMonth = c.get(Calendar.MONTH);
        this.mDay = c.get(Calendar.DAY_OF_MONTH);
        this.mHour = c.get(Calendar.HOUR_OF_DAY);
        this.mMinute = c.get(Calendar.MINUTE);
    }


    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        this.speed = (EditText) findViewById(R.id.editText3);
        this.Fine = (TextView)findViewById(R.id.editText4);
        this.btnSelectDate=(Button)findViewById(R.id.buttonSelectDate);
        this.btnSelectTime=(Button)findViewById(R.id.buttonSelectTime);
        this.inputDriver = (EditText) findViewById(R.id.editText1);
        this.inputLicence = (EditText) findViewById(R.id.editText2);
        this.inputOfficer = (EditText) findViewById(R.id.editText5);
        this.inputSpeed = (EditText) findViewById(R.id.editText3);
        this.FineAppl = (EditText) findViewById(R.id.editText4);
        this.inputCategory = (EditText) findViewById(R.id.editText6);
        this.registerFine = (TextView) findViewById(R.id.fineregistered);


        // Create button
        final Button btnRegisterfine = (Button) findViewById(R.id.savefine);



        // Set ClickListener on btnSelectDate
        this.btnSelectDate.setOnClickListener(new View.OnClickListener() {

            public void onClick(final View v) {
                // Show the DatePickerDialog
                showDialog(DATE_DIALOG_ID);
            }
        });

        // Set ClickListener on btnSelectTime
        this.btnSelectTime.setOnClickListener(new View.OnClickListener() {

            public void onClick(final View v) {
                // Show the TimePickerDialog
                showDialog(TIME_DIALOG_ID);
            }
        });


        // button click event
        btnRegisterfine.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(final View view) {
                // creating new product in background thread
                new CreateNewFine().execute();
            }
        });
    }
    /**
     * Background Async Task to Create new product
     * */
    class CreateNewFine extends AsyncTask<String, String, String> {

        /**
         * Before starting background thread Show Progress Dialog
         * */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            FineCalc.this.pDialog = new ProgressDialog(FineCalc.this);
            FineCalc.this.pDialog.setMessage("Registering Fine..");
            FineCalc.this.pDialog.setIndeterminate(false);
            FineCalc.this.pDialog.setCancelable(true);
            FineCalc.this.pDialog.show();
        }

        /**
         * Creating product
         * */
        protected String doInBackground(final String... args) {
            final String driver = FineCalc.this.inputDriver.getText().toString();
            final String licencenum = FineCalc.this.inputLicence.getText().toString();
            final String officer = FineCalc.this.inputOfficer.getText().toString();
            final String speed = FineCalc.this.inputSpeed.getText().toString();
            final String fine= FineCalc.this.FineAppl.getText().toString();
            final String category = FineCalc.this.inputCategory.getText().toString();


            // Building Parameters
            final List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("driver", driver));
            params.add(new BasicNameValuePair("licencenum", licencenum));
            params.add(new BasicNameValuePair("officer", officer));
            params.add(new BasicNameValuePair("speed", speed));
            params.add(new BasicNameValuePair("fine", fine));
            params.add(new BasicNameValuePair("category", category));

            // getting JSON Object
            // Note that create product url accepts POST method
            final JSONObject json = FineCalc.this.jsonParser.makeHttpRequest(url_create_fine, "POST", params);

            // check log cat from response
            Log.d("Create Response", json.toString());

            // check for success tag
            try {
                final int success = json.getInt(TAG_SUCCESS);

                if (success == 1) {
                    // successfully created product
                    final Intent i = new Intent(getApplicationContext(), UserLogin.class);
                    startActivity(i);
                    //registerFine.setText("Error occured in registration");

                    // closing this screen
                    finish();
                } else {
                    // failed to create product
                }
            } catch (final JSONException e) {
                e.printStackTrace();
            }

            return null;
        }

        /**
         * After completing background task Dismiss the progress dialog
         * **/
        protected void onPostExecute(final String file_url) {
            // dismiss the dialog once done
            FineCalc.this.pDialog.dismiss();
        }

    }

    public void ShowFine(final View clickedButton) {
        final double SpeedKMh = (Integer.parseInt(this.speed.getText().toString()));
        final TextView Result=(TextView)findViewById(R.id.editText6);

        if ((SpeedKMh>=80) && (SpeedKMh<=99)){
            final double TotalFine = 50;
            this.Fine.setText(new DecimalFormat("##.##").format(TotalFine));
            Result.setText("Speeding");
        }

        else if ((SpeedKMh>=56) && (SpeedKMh<=79)) {
            final double TotalFine = 25;
            this.Fine.setText(new DecimalFormat("##.##").format(TotalFine));
            Result.setText("Medium Speed");
        }

        else if ((SpeedKMh>=40) && (SpeedKMh<=55)) {
            final double TotalFine = 0;
            this.Fine.setText(new DecimalFormat("##.##").format(TotalFine));
            Result.setText("Slow");
        }

        else if (SpeedKMh<=39) {
            final double TotalFine = 0;
            this.Fine.setText(new DecimalFormat("##.##").format(TotalFine));
            Result.setText("Very Slow");
        }

        else if (SpeedKMh>=100) {
            final double TotalFine = 100;
            this.Fine.setText(new DecimalFormat("##.##").format(TotalFine));
            Result.setText("Over Speeding");
        }
    }

    // Register  DatePickerDialog listener
    private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {


        // the callback received when the user "sets" the Date in the DatePickerDialog

        public void onDateSet(DatePicker view, int yearSelected, int monthOfYear, int dayOfMonth) {

            year = yearSelected;
            month = monthOfYear+1;
            day = dayOfMonth;
            // Set the Selected Date in Select date Button
            btnSelectDate.setText("Date selected: "+day+"/"+month+"/"+year);
        }
    };

    // Register  TimePickerDialog listener

    private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() {

        // the callback received when the user "sets" the TimePickerDialog in the dialog

        public void onTimeSet(TimePicker view, int hourOfDay, int min) {
            hour = hourOfDay;
            minute = min;
            // Set the Selected Date in Select date Button
            btnSelectTime.setText("Time selected: "+hour+":"+minute);
        }
    };


    // Method automatically gets Called when you call showDialog()  method

    @Override
    protected Dialog onCreateDialog(final int id) {
        switch (id) {
            case DATE_DIALOG_ID:
                // create a new DatePickerDialog with values you want to show
                return new DatePickerDialog(this, this.mDateSetListener, this.mYear, this.mMonth, this.mDay);
                // create a new TimePickerDialog with values you want to show
            case TIME_DIALOG_ID:
                return new TimePickerDialog(this, this.mTimeSetListener, this.mHour, this.mMinute, false);
        }

        return null;
    }
}

and my long error list

08-03 18:25:50.288: E/JSON Parser(1190): Error parsing data org.json.JSONException: Value <!DOCTYPE of type java.lang.String cannot be converted to JSONObject
08-03 18:25:50.298: E/AndroidRuntime(1190): FATAL EXCEPTION: AsyncTask #1
08-03 18:25:50.298: E/AndroidRuntime(1190): Process: com.finecalc.ltafinecalculator, PID: 1190
08-03 18:25:50.298: E/AndroidRuntime(1190): java.lang.RuntimeException: An error occured while executing doInBackground()
08-03 18:25:50.298: E/AndroidRuntime(1190):     at android.os.AsyncTask$3.done(AsyncTask.java:300)
08-03 18:25:50.298: E/AndroidRuntime(1190):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
08-03 18:25:50.298: E/AndroidRuntime(1190):     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
08-03 18:25:50.298: E/AndroidRuntime(1190):     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
08-03 18:25:50.298: E/AndroidRuntime(1190):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
08-03 18:25:50.298: E/AndroidRuntime(1190):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
08-03 18:25:50.298: E/AndroidRuntime(1190):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
08-03 18:25:50.298: E/AndroidRuntime(1190):     at java.lang.Thread.run(Thread.java:841)
08-03 18:25:50.298: E/AndroidRuntime(1190): Caused by: java.lang.NullPointerException
08-03 18:25:50.298: E/AndroidRuntime(1190):     at com.finecalc.ltafinecalculator.FineCalc$CreateNewFine.doInBackground(FineCalc.java:187)
08-03 18:25:50.298: E/AndroidRuntime(1190):     at com.finecalc.ltafinecalculator.FineCalc$CreateNewFine.doInBackground(FineCalc.java:1)
08-03 18:25:50.298: E/AndroidRuntime(1190):     at android.os.AsyncTask$2.call(AsyncTask.java:288)
08-03 18:25:50.298: E/AndroidRuntime(1190):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
08-03 18:25:50.298: E/AndroidRuntime(1190):     ... 4 more
08-03 18:25:51.628: E/WindowManager(1190): android.view.WindowLeaked: Activity com.finecalc.ltafinecalculator.FineCalc has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{b3f08e18 V.E..... R......D 0,0-642,345} that was originally added here
08-03 18:25:51.628: E/WindowManager(1190):  at android.view.ViewRootImpl.<init>(ViewRootImpl.java:348)
08-03 18:25:51.628: E/WindowManager(1190):  at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:248)
08-03 18:25:51.628: E/WindowManager(1190):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
08-03 18:25:51.628: E/WindowManager(1190):  at android.app.Dialog.show(Dialog.java:286)
08-03 18:25:51.628: E/WindowManager(1190):  at com.finecalc.ltafinecalculator.FineCalc$CreateNewFine.onPreExecute(FineCalc.java:158)
08-03 18:25:51.628: E/WindowManager(1190):  at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
08-03 18:25:51.628: E/WindowManager(1190):  at android.os.AsyncTask.execute(AsyncTask.java:535)
08-03 18:25:51.628: E/WindowManager(1190):  at com.finecalc.ltafinecalculator.FineCalc$5.onClick(FineCalc.java:139)
08-03 18:25:51.628: E/WindowManager(1190):  at android.view.View.performClick(View.java:4438)
08-03 18:25:51.628: E/WindowManager(1190):  at android.view.View$PerformClick.run(View.java:18422)
08-03 18:25:51.628: E/WindowManager(1190):  at android.os.Handler.handleCallback(Handler.java:733)
08-03 18:25:51.628: E/WindowManager(1190):  at android.os.Handler.dispatchMessage(Handler.java:95)
08-03 18:25:51.628: E/WindowManager(1190):  at android.os.Looper.loop(Looper.java:136)
08-03 18:25:51.628: E/WindowManager(1190):  at android.app.ActivityThread.main(ActivityThread.java:5017)
08-03 18:25:51.628: E/WindowManager(1190):  at java.lang.reflect.Method.invokeNative(Native Method)
08-03 18:25:51.628: E/WindowManager(1190):  at java.lang.reflect.Method.invoke(Method.java:515)
08-03 18:25:51.628: E/WindowManager(1190):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
08-03 18:25:51.628: E/WindowManager(1190):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
08-03 18:25:51.628: E/WindowManager(1190):  at dalvik.system.NativeStart.main(Native Method)

According to your logs, your code is pointing NullPointerException that's why JSONObject is not parsed properly as it cannot parse empty data. So check your code that which part is giving NullPointerException

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