将记录插入 phpmyadmin 时出现 Asynctask 错误
Posted
技术标签:
【中文标题】将记录插入 phpmyadmin 时出现 Asynctask 错误【英文标题】:Asynctask error while inserting records into phpmyadmin 【发布时间】:2016-10-18 19:32:36 【问题描述】:我一直在尝试将值插入数据库,但单击按钮时应用程序崩溃。我有两个 asynctask 类。是不是因为这个?任何帮助或教程链接都会很棒!代码如下
public class DataEntry extends Activity implements OnItemSelectedListener
EditText edt_name,edt_age;
RadioGroup gendergroup;
RadioButton radioGenderButton;
Spinner spnr_currentAilment;
Spinner spnr_pastAilment;
Spinner spnr_Place,spnr_Area;
ArrayList<CurrentAilment> c_ailmentList;
ArrayList<getArea> arealist;
ArrayList<getPlace> placelist;
Button btn_submit;
String name,age,gender,current_ailment,past_ailment,place,area;
ProgressDialog pDialog;
// Url to get all the current ailments
private String URL = "http://192.168.0.105/colg_project/health_project.php";
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.data_entry);
/* ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
*/
edt_name = (EditText)findViewById(R.id.editName);
edt_age = (EditText)findViewById(R.id.editAge);
gendergroup = (RadioGroup)findViewById(R.id.radioGroupGender);
spnr_currentAilment = (Spinner)findViewById(R.id.spinnerCurrentAilment);
spnr_pastAilment = (Spinner)findViewById(R.id.spinnerPastAilment);
spnr_Place = (Spinner)findViewById(R.id.spinnerPlaceName);
spnr_Area = (Spinner)findViewById(R.id.spinnerAreName);
btn_submit = (Button)findViewById(R.id.btn_Submit);
c_ailmentList = new ArrayList<CurrentAilment>();
new GetInformation().execute();
// spinner item select listener
spnr_currentAilment.setOnItemSelectedListener(this);
spnr_Place.setOnItemSelectedListener(new OnItemSelectedListener()
@Override
public void onItemSelected(AdapterView<?> parent, View view,int position, long id)
// TODO Auto-generated method stub
List<String> area_array = new ArrayList<String>();
for(int j=0;j<arealist.size();j++)
if(placelist.get(position).getPlaceId().equals(arealist.get(j).getPlaceId()) )
area_array.add(arealist.get(j).getAreaName());
//Log.e("","spiner1"+arealist.get(j).getAreaName());
ArrayAdapter<String> adapter_area = new ArrayAdapter<String>(DataEntry.this,
android.R.layout.simple_spinner_item, area_array);
adapter_area.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// attaching data adapter to spinner
spnr_Area.setAdapter(adapter_area);
@Override
public void onNothingSelected(AdapterView<?> parent)
// TODO Auto-generated method stub
);
btn_submit.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
// TODO Auto-generated method stub
name = edt_name.getText().toString();
age = edt_age.getText().toString();
radioGenderButton = (RadioButton) findViewById(gendergroup.getCheckedRadioButtonId());
gender = radioGenderButton.getText().toString();
// Log.e("","" + gender);
Toast.makeText(getApplicationContext(), "" + gender, Toast.LENGTH_SHORT).show();
current_ailment = spnr_currentAilment.getSelectedItem().toString();
past_ailment = spnr_pastAilment.getSelectedItem().toString();
place = spnr_Place.getSelectedItem().toString();
area = spnr_Area.getSelectedItem().toString();
insertToDatabase(name,age,gender,current_ailment,past_ailment,place,area);
);
private void populateSpinner()
List<String> ailments_array = new ArrayList<String>();
for (int i = 0; i < c_ailmentList.size(); i++)
ailments_array.add(c_ailmentList.get(i).getCurrent_ailment());
// Creating adapter for spinner
ArrayAdapter<String> adapter_ailment = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item, ailments_array);
adapter_ailment.setDropDownViewResource(R.layout.spinner_item);
spnr_currentAilment.setAdapter(adapter_ailment);
spnr_pastAilment.setAdapter(adapter_ailment);
//for places spinner
List<String> place_array = new ArrayList<String>();
for(int i = 0;i < placelist.size();i++)
place_array.add(placelist.get(i).getPlaceName());
ArrayAdapter<String> adapter_places = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_dropdown_item,place_array);
adapter_places.setDropDownViewResource(R.layout.spinner_item);
spnr_Place.setAdapter(adapter_places);
private class GetInformation extends AsyncTask<Void, Void, Void>
@Override
protected void onPreExecute()
super.onPreExecute();
pDialog = new ProgressDialog(DataEntry.this);
pDialog.setMessage("loading..");
pDialog.setCancelable(false);
pDialog.show();
@Override
protected Void doInBackground(Void... arg0)
ServiceHandler jsonParser = new ServiceHandler();
String json = jsonParser.makeServiceCall(URL, ServiceHandler.GET);
placelist = new ArrayList<getPlace>();
arealist = new ArrayList<getArea>();
// Log.e("Response: ", "> " + json);
if (json != null)
try
JSONObject jsonObj = new JSONObject(json);
if (jsonObj != null)
JSONArray ailments = jsonObj.getJSONArray("ailments");
JSONArray places = jsonObj.getJSONArray("places");
JSONArray areas = jsonObj.getJSONArray("areas");
for (int i = 0; i < ailments.length(); i++)
JSONObject c_ailObj = (JSONObject) ailments.get(i);
CurrentAilment ail = new CurrentAilment();
ail.setId(Integer.parseInt(c_ailObj.getString("id")));
ail.setCurrent_ailment(c_ailObj.getString("ca_name"));
c_ailmentList.add(ail);
for (int i = 0; i < places.length(); i++)
JSONObject place_obj = (JSONObject) places.get(i);
getPlace get_place = new getPlace();
get_place.setPlaceId(place_obj.getString("place_id"));
get_place.setPlaceName(place_obj.getString("place_name"));
placelist.add(get_place);
for (int i = 0; i < areas.length(); i++)
JSONObject area_obj = (JSONObject) areas.get(i);
getArea get_area = new getArea();
get_area.setAreaId(area_obj.getString("area_id"));
get_area.setAreaName(area_obj.getString("area_name"));
get_area.setPlaceId(area_obj.getString("place_id"));
arealist.add(get_area);
catch (JSONException e)
e.printStackTrace();
else
Log.e("JSON Data", "Didn't receive any data from server!");
return null;
@Override
protected void onPostExecute(Void result)
super.onPostExecute(result);
if (pDialog.isShowing())
pDialog.dismiss();
populateSpinner();
private void insertToDatabase(String name, String age,String gender,String c_ailment,String p_ailment,String place,String area)
class SendPostReqAsyncTask extends AsyncTask<String, Void, String>
@Override
protected String doInBackground(String... params)
String paramUsername = params[0];
String paramAddress = params[1];
String name = edt_name.getText().toString();
String age = edt_age.getText().toString();
radioGenderButton = (RadioButton) findViewById(gendergroup.getCheckedRadioButtonId());
String gender = radioGenderButton.getText().toString();
// Log.e("","" + gender);
Toast.makeText(getApplicationContext(), "" + gender, Toast.LENGTH_SHORT).show();
String c_ailment = spnr_currentAilment.getSelectedItem().toString();
String p_ailment = spnr_pastAilment.getSelectedItem().toString();
String place = spnr_Place.getSelectedItem().toString();
String area = spnr_Area.getSelectedItem().toString();
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("name", name));
nameValuePairs.add(new BasicNameValuePair("age", age));
nameValuePairs.add(new BasicNameValuePair("gender", gender));
nameValuePairs.add(new BasicNameValuePair("c_ailment", c_ailment));
nameValuePairs.add(new BasicNameValuePair("p_ailment", p_ailment));
nameValuePairs.add(new BasicNameValuePair("place", place));
nameValuePairs.add(new BasicNameValuePair("area", area));
try
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("192.168.0.105/insert_colg_dp.php");
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
catch (ClientProtocolException e)
catch (IOException e)
return "success";
@Override
protected void onPostExecute(String result)
super.onPostExecute(result);
Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG).show();
SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask();
sendPostReqAsyncTask.execute(name, age, gender,c_ailment,p_ailment,place,area);
@Override
public boolean onOptionsItemSelected(MenuItem item)
switch (item.getItemId())
case android.R.id.home:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id)
// TODO Auto-generated method stub
/* ((TextView) parent.getChildAt(0)).setTextColor(Color.MAGENTA);
((TextView) parent.getChildAt(0)).setTextSize(12);*/
@Override
public void onNothingSelected(AdapterView<?> parent)
// TODO Auto-generated method stub
我的php代码:
<?php
$con = mysqli_connect("localhost","root","","college_project") or die("Error " . mysqli_error($connection));
$name = $_POST['name'];
$age = $_POST['age'];
$gender = $_POST['gender'];
$c_ailment = $_POST['c_ailment'];
$p_ailment = $_POST['p_ailment'];
$place = $_POST['place'];
$area = $_POST['area'];
//Creating an sql query2
$sql = "INSERT INTO records (user_name,age,gender,current_ailment,past_ailment,place,area)
VALUES ('$name','$age','$gender','$c_ailment','$p_ailment','$place','$area')";
//Executing query to database
if(mysqli_query($con,$sql))
echo 'Success';
else
echo 'Failure';
//Closing the database
mysqli_close($con);
?>
最后是日志猫:
06-16 23:45:49.807: E/AndroidRuntime(615): FATAL EXCEPTION: AsyncTask #3
06-16 23:45:49.807: E/AndroidRuntime(615): java.lang.RuntimeException: An error occured while executing doInBackground()
06-16 23:45:49.807: E/AndroidRuntime(615): at android.os.AsyncTask$3.done(AsyncTask.java:278)
06-16 23:45:49.807: E/AndroidRuntime(615): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
06-16 23:45:49.807: E/AndroidRuntime(615): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
06-16 23:45:49.807: E/AndroidRuntime(615): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
06-16 23:45:49.807: E/AndroidRuntime(615): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
06-16 23:45:49.807: E/AndroidRuntime(615): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
06-16 23:45:49.807: E/AndroidRuntime(615): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
06-16 23:45:49.807: E/AndroidRuntime(615): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
06-16 23:45:49.807: E/AndroidRuntime(615): at java.lang.Thread.run(Thread.java:856)
06-16 23:45:49.807: E/AndroidRuntime(615): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
06-16 23:45:49.807: E/AndroidRuntime(615): at android.os.Handler.<init>(Handler.java:121)
06-16 23:45:49.807: E/AndroidRuntime(615): at android.widget.Toast$TN.<init>(Toast.java:317)
06-16 23:45:49.807: E/AndroidRuntime(615): at android.widget.Toast.<init>(Toast.java:91)
06-16 23:45:49.807: E/AndroidRuntime(615): at android.widget.Toast.makeText(Toast.java:233)
06-16 23:45:49.807: E/AndroidRuntime(615): at colg.project.healthapp.DataEntry$1SendPostReqAsyncTask.doInBackground(DataEntry.java:220)
06-16 23:45:49.807: E/AndroidRuntime(615): at colg.project.healthapp.DataEntry$1SendPostReqAsyncTask.doInBackground(DataEntry.java:1)
06-16 23:45:49.807: E/AndroidRuntime(615): at android.os.AsyncTask$2.call(AsyncTask.java:264)
06-16 23:45:49.807: E/AndroidRuntime(615): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
06-16 23:45:49.807: E/AndroidRuntime(615): ... 5 more
【问题讨论】:
AsyncTask and Looper.prepare() error的可能重复 【参考方案1】:似乎您正在尝试从 doInBackground()
方法调用任何 UI 小部件,这是不可能的,因为 AsyncTask 是工作线程而不是 UI 线程。所以你需要在doInBackground()
方法中调用runOnUiThread()
方法。
activity.runOnUiThread(new Runnable()
public void run()
Toast.makeText(activity, "Hello", Toast.LENGTH_SHORT).show();
);
【讨论】:
我评论了祝酒词,但错误仍在继续..其余代码有问题吗? 这个建议有帮助......我只需要卸载并再次运行它......它起作用了......谢谢:)以上是关于将记录插入 phpmyadmin 时出现 Asynctask 错误的主要内容,如果未能解决你的问题,请参考以下文章
使用JDBC连接将记录插入Apache Ignite Cluster时出现异常
将 sql.zip 文件导入 phpmyadmin 时出现内存大小错误
将数据库导入 phpMyAdmin (MAMP) 时出现 SQL 语法错误