[英]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;
}
}
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.