简体   繁体   English

[英]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. 更具体地说,我想让某人输入一个值作为速度,然后单击“计算”,然后单击我的if ... else if结构将计算所得的结果以支付罚款并显示出来。

Then when I click save then these input data including resulting fine should be uploaded to my SAL database. 然后,当我单击“保存”时,这些包含所得罚款的输入数据应上传到我的SAL数据库中。

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: 在下面找到我的Java代码:

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. 根据您的日志,您的代码指向NullPointerException ,这就是JSONObject无法正确解析的原因,因为它无法解析空数据。 So check your code that which part is giving NullPointerException 因此,请检查您的代码,其中哪一部分给出了NullPointerException

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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