我需要帮助。我在" getText()。toString()"它说" getTEXT方法应该从UI线程中调用......"这是什么意思?并且在提交数据时,数据不会保存在数据库中。有人可以帮帮我吗?我已经没时间了:'(。如果有任何需要,请告诉我。
这是我的代码:
SecondScreen.java
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
public class SecondScreen extends Activity {
// Progress Dialog
private ProgressDialog pDialog;
JSONParser jsonParser = new JSONParser();
EditText name_eT;
EditText age_eT;
EditText email_eT;
EditText phone_eT;
EditText descr_eT;
private static String url_submit_data = "http://khaty-ismail0.rhcloud.com/phptutorial/submit.php";
// JSON Node names
private static final String TAG_SUCCESS = "success";
private Button submitButton;
String Name="1";
String Age="1";
String Gender ="1";
String Email ="1";
String Phone ="1";
String IncidentType ="1";
String Description ="1";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_layout);
// Edit Text
inputName = (EditText) findViewById(R.id.name_eT);
age_eT = (EditText) findViewById(R.id.age_eT);
email_eT = (EditText) findViewById(R.id.email_eT);
phone_eT = (EditText) findViewById(R.id.phone_eT);
descr_eT = (EditText) findViewById(R.id.descr_eT);
CheckBox cBoxMale = (CheckBox) findViewById(R.id.checkBoxMale);
CheckBox cBoxFemale = (CheckBox) findViewById(R.id.checkBoxFemale);
Spinner list = (Spinner) findViewById(R.id.spinner);
// Create button
Button submitButton = (Button) findViewById(R.id.subm_btn);
// button click event
submitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// creating new product in background thread
/*String Name = name_eT.getText().toString();
String Age = age_eT.getText().toString();
String Email = email_eT.getText().toString();
String Phone = phone_eT.getText().toString();
String Description = descr_eT.getText().toString();*/
/*Intent i = new Intent(getApplicationContext(),SubmitData.class);
startActivity(i);*/
new SubmitData().execute(Name, Age, Gender, Email, Phone, IncidentType, Description);
}
});
}
public void onCheckboxClicked(View V) {
boolean checked = ((CheckBox) V).isChecked();
switch (V.getId()) {
case R.id.checkBoxMale:
if (checked);
//Male
else
//No gender
break;
case R.id.checkBoxFemale:
if (checked);
//Female
else
//No gender
break;
}
}
/**
* Background Async Task to Create new product
* */
class SubmitData extends AsyncTask<String, String, String> {
/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(SecondScreen.this);
pDialog.setMessage("Submitting your data...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
/**
* Creating product
* */
protected String doInBackground(String... args) {
//noinspection ResourceType
String Name = name_eT.getText().toString();
//noinspection ResourceType
String Age = age_eT.getText().toString();
String Email = email_eT.getText().toString();
String Phone = phone_eT.getText().toString();
String Description = descr_eT.getText().toString();
String Name = args[0];
String Age = args[1];
String Gender = args [2];
String Email = args[3];
String Phone = args[4];
String IncidentType = args[5];
String Description = args[6];
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("Name", Name));
params.add(new BasicNameValuePair("Age", Age));
params.add(new BasicNameValuePair("Gender", Gender));
params.add(new BasicNameValuePair("Email", Email));
params.add(new BasicNameValuePair("Phone", Phone));
params.add(new BasicNameValuePair("Incident Type", IncidentType));
params.add(new BasicNameValuePair("Description", Description));
// getting JSON Object
// Note that create product url accepts POST method
ServiceHandler serviceClient = new ServiceHandler();
String json = serviceClient.makeServiceCall(url_submit_data, ServiceHandler.POST, params);
// check log cat fro response
Log.d("Create Response", json.toString());
// check for success tag
if (json != null) {
try {
JSONObject jsonObj = new JSONObject(json);
boolean error = jsonObj.getBoolean("error");
// checking for error node in json
if (!error) {
// new category created successfully
Log.e("Prediction added successfully ", "> " + jsonObj.getString("message"));
} else {
Log.e("Add Prediction Error: ",
"> " + jsonObj.getString("message"));
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Log.e("JSON Data", "JSON data error!");
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
}
}
}
这是我的 ServiceHandler.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import android.util.Log;
public class ServiceHandler {
static String response = null;
static InputStream is = null;
public final static int GET = 1;
public final static int POST = 2;
public ServiceHandler() {
}
/*
* Making service call
* @url - url to make request
* @method - http request method
* */
public String makeServiceCall(String url, int method) {
return this.makeServiceCall(url, method, null);
}
/*
* Making service call
* @url - url to make request
* @method - http request method
* @params - http request params
* */
public String makeServiceCall(String url, int method,List<NameValuePair> params) {
try {
// http client
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpEntity httpEntity = null;
HttpResponse httpResponse = null;
// Checking http request method type
if (method == POST) {
HttpPost httpPost = new HttpPost(url);
// adding post params
if (params != null) {
httpPost.setEntity(new UrlEncodedFormEntity(params));
}
httpResponse = httpClient.execute(httpPost);
} else if (method == GET) {
// appending params to url
if (params != null) {
String paramString = URLEncodedUtils
.format(params, "utf-8");
url += "?" + paramString;
}
HttpGet httpGet = new HttpGet(url);
Log.d("url", url);
httpResponse = httpClient.execute(httpGet);
}
httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "UTF-8"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
response = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error: " + e.toString());
}
return response;
}
}
这里是布局文件 secondlayout.xml :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="@string/User_info"
android:id="@+id/userInfo"
android:textSize="30sp"
android:textColor="@color/colorFont"
android:textStyle="bold"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"/>
<TextView
android:layout_width="70dp"
android:layout_height="wrap_content"
android:text="Name:"
android:id="@+id/name_tV"
android:textColor="@color/colorFont"
android:layout_marginTop="24dp"
android:layout_below="@+id/userInfo"
android:layout_alignLeft="@+id/userInfo"
android:layout_alignStart="@+id/userInfo" />
<TextView
android:layout_width="70dp"
android:layout_height="wrap_content"
android:text="Age:"
android:id="@+id/age_tV"
android:textColor="@color/colorFont"
android:layout_alignBottom="@+id/age_eT"
android:layout_alignLeft="@+id/name_tV"
android:layout_alignStart="@+id/name_tV" />
<TextView
android:layout_width="70dp"
android:layout_height="wrap_content"
android:text="Gender"
android:id="@+id/gender_tV"
android:textColor="@color/colorFont"
android:layout_above="@+id/email_eT"
android:layout_alignLeft="@+id/age_tV"
android:layout_alignStart="@+id/age_tV" />
<TextView
android:layout_width="70dp"
android:layout_height="wrap_content"
android:text="Email:"
android:id="@+id/email_tV"
android:textColor="@color/colorFont"
android:layout_alignBottom="@+id/email_eT"
android:layout_alignLeft="@+id/gender_tV"
android:layout_alignStart="@+id/gender_tV"
android:layout_marginTop="32dp"/>
<TextView
android:layout_width="70dp"
android:layout_height="wrap_content"
android:text="Phone"
android:id="@+id/phone_tV"
android:textColor="@color/colorFont"
android:layout_alignBottom="@+id/phone_eT"
android:layout_alignLeft="@+id/gender_tV"
android:layout_alignStart="@+id/gender_tV" />
<EditText
android:layout_width="200dp"
android:layout_height="30dp"
android:layout_marginBottom="5dp"
android:inputType="textPersonName"
android:hint="@string/hint_required"
android:textColorHint="@color/colorBackground"
android:background="@drawable/border_style"
android:ems="10"
android:id="@+id/name_eT"
android:textColor="@color/inputFont"
android:layout_alignBottom="@+id/name_tV"
android:layout_alignRight="@+id/userInfo"
android:layout_alignEnd="@+id/userInfo" />
<EditText
android:layout_width="200dp"
android:layout_height="30dp"
android:inputType="number"
android:ems="10"
android:hint="@string/hint_required"
android:textColorHint="@color/colorBackground"
android:background="@drawable/border_style"
android:id="@+id/age_eT"
android:textColor="@color/inputFont"
android:layout_below="@+id/name_eT"
android:layout_alignLeft="@+id/name_eT"
android:layout_alignStart="@+id/name_eT" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Male"
android:id="@+id/checkBoxMale"
android:onClick="onCheckboxClicked"
android:textColor="@color/colorFont"
android:layout_below="@+id/age_tV"
android:layout_alignLeft="@+id/age_eT"
android:layout_alignStart="@+id/age_eT" />
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Female"
android:id="@+id/checkBoxFemale"
android:onClick="onCheckboxClicked"
android:textColor="@color/colorFont"
android:layout_alignTop="@+id/checkBoxMale"
android:layout_alignRight="@+id/userInfo"
android:layout_alignEnd="@+id/userInfo" />
<EditText
android:layout_width="200dp"
android:layout_height="30dp"
android:layout_marginBottom="5dp"
android:inputType="textEmailAddress"
android:ems="10"
android:id="@+id/email_eT"
android:hint="@string/hint_required"
android:textColorHint="@color/colorBackground"
android:textColor="@color/inputFont"
android:background="@drawable/border_style"
android:layout_below="@+id/checkBoxMale"
android:layout_alignLeft="@+id/checkBoxMale"
android:layout_alignStart="@+id/checkBoxMale" />
<EditText
android:layout_width="200dp"
android:layout_height="30dp"
android:inputType="phone"
android:ems="10"
android:id="@+id/phone_eT"
android:textColor="@color/inputFont"
android:hint="@string/hint_required"
android:textColorHint="@color/colorBackground"
android:background="@drawable/border_style"
android:layout_below="@+id/email_eT"
android:layout_alignLeft="@+id/email_eT"
android:layout_alignStart="@+id/email_eT" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/incident_info"
android:id="@+id/incidentInfo"
android:textColor="@color/colorFont"
android:textStyle="bold"
android:textSize="30sp"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
<Spinner
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/spinner"
android:prompt="@array/incident_type"
android:entries="@array/incident_type"
android:layout_below="@+id/incidentInfo"
android:layout_alignLeft="@+id/phone_eT"
android:layout_alignStart="@+id/phone_eT"
android:layout_alignRight="@+id/phone_eT"
android:layout_alignEnd="@+id/phone_eT" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="@string/incident_type_DD"
android:textColor="@color/colorFont"
android:id="@+id/incident_DD"
android:layout_below="@+id/incidentInfo"
android:layout_toLeftOf="@+id/spinner"
android:layout_toStartOf="@+id/spinner" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="@string/description"
android:id="@+id/description_tV"
android:textColor="@color/colorFont"
android:layout_below="@+id/spinner"
android:layout_alignLeft="@+id/phone_tV"
android:layout_alignStart="@+id/phone_tV" />
<EditText
android:layout_width="300dp"
android:layout_height="60dp"
android:inputType="textMultiLine"
android:ems="10"
android:id="@+id/descr_eT"
android:hint="@string/descr_hint"
android:textColorHint="@color/colorBackground"
android:gravity="top"
android:background="@drawable/border_style"
android:textColor="@color/inputFont"
android:layout_below="@+id/description_tV"
android:layout_alignLeft="@+id/description_tV"
android:layout_alignStart="@+id/description_tV" />
<Button
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_margin="5dp"
android:text="SUBMIT"
android:onClick="SubmitButton"
android:textStyle="bold"
android:textSize="35sp"
android:id="@+id/subm_btn"
android:background="@drawable/custom_btn"
android:textColor="@color/buttonFont"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
这是我的 submit.php 文件:
<?php
// array for JSON response
$response = array();
// check for required fields
if (isset($_POST['Name']) && isset($_POST['Age']) && isset($_POST['Email']) && isset($_POST['Phone']) && isset($_POST['Description'])) {
$Name = $_POST['Name'];
$Age = $_POST['Age'];
$Gender = $_POST['Gender'];
$Email = $_POST['Email'];
$Phone = $_POST['Phone'];
$Incident Type = $_POST['Incident Type'];
$Description = $_POST['Description'];
// include db connect class
require_once __DIR__ . '/db_connect.php';
// connecting to db
$db = new DB_CONNECT();
// mysql inserting a new row
$result = mysql_query("INSERT INTO user(Name, Age, Email, Phone, Description VALUES('$Name', '$Age', '$Email', '$Phone', '$Description')");
// check if row inserted or not
if ($result) {
// successfully inserted into database
$response["success"] = 1;
$response["message"] = "Product successfully created.";
// echoing JSON response
echo json_encode($response);
} else {
// failed to insert row
$response["success"] = 0;
$response["message"] = "Oops! An error occurred.";
// echoing JSON response
echo json_encode($response);
}
} else {
// required field is missing
$response["success"] = 0;
$response["message"] = "Required field(s) is missing";
// echoing JSON response
echo json_encode($response);
}
?>
答案 0 :(得分:0)
您不能在UI元素(您的EditText-s)上使用getText()
,因为AsyncTask.doInBackground()
在单独的线程中运行,并且无法访问UI元素。
您实际上是new SubmitData().execute(Name, Age, Gender, Email, Phone, IncidentType, Description);
做的,并且args[]
从doInBackground()
内部引用它们