![](/img/trans.png)
[英]How do I upload both form data and multiple files from my android app, using HTTPURLConnection to my server, where I am using PHP?
[英]i am trying to upload my data on sql server through my android app
这是安卓代码
public class MainActivity extends AppCompatActivity {
String ServerURL = "http://portal15.unaux.com/get_data.php";
EditText qr_code, desc,price ;
Button button;
String Tempqr, Tempdesc,Tempprice ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
qr_code=(EditText) findViewById(R.id.code);
desc=(EditText) findViewById(R.id.resource);
price=(EditText) findViewById(R.id.price);
button=(Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Getdata();
insertdata(Tempqr,Tempdesc,Tempprice);
}
// converting input data to string
public void Getdata(){
Tempqr = qr_code.getText().toString();
Tempdesc=desc.getText().toString();
Tempprice = price.getText().toString();
}
public void insertdata(final String code, final String description,final String price){
class SendPostReqAsyncTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
String qrHolder = code;
String descHolder = description ;
String priceHolder=price;
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("code", qrHolder));
nameValuePairs.add(new BasicNameValuePair("description", descHolder));
nameValuePairs.add(new BasicNameValuePair("price", priceHolder));
try {
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(ServerURL);
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
} catch (ClientProtocolException e) {
} catch (IOException e) {
}
return "Data Inserted Successfully";
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Toast.makeText(MainActivity.this, "Data Submit Successfully", Toast.LENGTH_SHORT).show();
}
}
SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask();
sendPostReqAsyncTask.execute(code,description,price);
}
});
}
}
数据没有上传到 mysql 数据库中,但我的手机上显示一个吐司,说数据上传成功,但没有数据上传到服务器。
这是我的 PHP 代码
<?php include 'DatabaseConfig.php';
$con = mysqli_connect($HostName,$HostUser,$HostPass,$DatabaseName);
$code = $_POST['code'];
$details = $_POST['description'];
$price=$_POST['price'];
$Sql_Query="INSERT INTO item_details (item_code, item_details, Item_price)
VALUES(' $code ',' $details ',' $price')";
if(mysqli_query($con,$Sql_Query)) {
echo 'Data Submitted Successfully';
}
else {
echo 'Try Again';
}
mysqli_close($con); ?>
将数据注册(保存)到数据库中的简单方法
public class MainActivity extends AppCompatActivity {
private EditText etFullName, etUserName, etPassword, etPhone, etEmail;
private Button clickbut;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etFullName = (EditText) findViewById(R.id.etFullName);
etUserName = (EditText) findViewById(R.id.etUserName);
etPassword = (EditText) findViewById(R.id.etPassword);
etPhone = (EditText) findViewById(R.id.etPhone);
etEmail = (EditText) findViewById(R.id.etEmail);
/*clickbut=(Button)findViewById(R.id.Show);
clickbut.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
launch();
}
});*/
}
public void signup(View v) {
String fullName = etFullName.getText().toString();
String userName = etUserName.getText().toString();
String passWord = etPassword.getText().toString();
String phoneNumber = etPhone.getText().toString();
String emailAddress = etEmail.getText().toString();
Toast.makeText(this, "Signing up...", Toast.LENGTH_SHORT).show();
new SignupActivity(this).execute(fullName, userName, passWord, phoneNumber, emailAddress);
etFullName.setText("");//clear all the fields after button click
etUserName.setText("");
etPassword.setText("");
etPhone.setText("");
etEmail.setText("");
}
/*public void launch(){
new Show_details(this).execute();
Intent intent=new Intent(this,ShowActvity.class);
startActivity(intent);
}*/
}
以上是用于获取用户数据并将其传递给 AsyncTask 类的 mainActivity(这里是 SignupActivity.java)
public class SignupActivity extends AsyncTask<String,Void,String >{
private Context context;
public SignupActivity(Context context){
this.context =context;
}
@Override
protected String doInBackground(String... arg0) {
String fullName = arg0[0];
String userName = arg0[1];
String passWord = arg0[2];
String phoneNumber = arg0[3];
String emailAddress = arg0[4];
String link;
String data;
BufferedReader bufferedReader;
String result;
try {
data = "?fullname=" + URLEncoder.encode(fullName, "UTF-8");
data += "&username=" + URLEncoder.encode(userName, "UTF-8");
data += "&password=" + URLEncoder.encode(passWord, "UTF-8");
data += "&phonenumber=" + URLEncoder.encode(phoneNumber, "UTF-8");
data += "&emailaddress=" + URLEncoder.encode(emailAddress, "UTF-8");
link = "http://192.168.43.212/signup.php" + data;
URL url = new URL(link);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
result = bufferedReader.readLine();
return result;
} catch (Exception e) {
return new String("Exception: " + e.getMessage());
}
}
@Override
protected void onPostExecute(String result) {
if (result.equals("Registration Successfull")) {
Toast.makeText(context, "Data inserted successfully. Signup successful.", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(context, "Registration Unsuccessfull", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
}
在这里,我使用 GET 方法将值传递给 signup.php,signup.php 文件:
<?php
$con=mysqli_connect("localhost","rohan","rohan","singup");
mysqli_connect_errno($con);
$fullName = $_GET['fullname'];
$userName = $_GET['username'];
$passWord = $_GET['password'];
$phoneNumber = $_GET['phonenumber'];
$emailAddress = $_GET['emailaddress'];
$result = mysqli_query($con,"INSERT INTO user (fullname, username,
password, phone, email) VALUES ('$fullName', '$userName', '$passWord', '$phoneNumber', '$emailAddress')");
if($result == true) {
echo "Registration Successfull";
}
else{
echo "Registration Unsuccessfull";
}
mysqli_close($con);?>
为了在 MainActivity 中调用 singup 方法,我在 MainActivity 的布局文件 (.xml) 中为 (singup)button 提供了 onClick 值
<Button
android:id="@+id/btnSignup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="signup"
android:text="Sign up" />
我希望这会对你有所帮助,并建议不要使用 Asynctask 来进行 Http 调用,而是使用另一个像 Volley 和 Retrofit 这样的方法来实现更简单、更快速的连接......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.