【问题标题】:i am trying to upload my data on sql server through my android app我正在尝试通过我的 android 应用程序将我的数据上传到 sql server
【发布时间】:2018-02-13 11:38:45
【问题描述】:

这是安卓代码

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 数据库,但是我的手机上显示一个 toast,说数据上传成功,但没有数据上传到服务器上。

这是我的 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); ?>

【问题讨论】:

  • 那么问题是什么?
  • 数据没有上传到mysql数据库toast显示在我的手机上,因为数据上传成功,但没有数据上传到服务器上。
  • 这里是 php 代码
  • 一个建议只是离开HttpClient 并可能使用网络库RetroFit。并且不要在 cmets 中添加代码编辑你的问题来解释问题。
  • 你可以给我一个使用改造的代码吗?我以前没有使用过这个 api?

标签: php android sql


【解决方案1】:

简单将数据注册(保存)到数据库的方法

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);
}*/

}

上面是mainActivity,用于获取用户数据并将其传递给AsyncTask类(这里是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 方法,我已将 onClick 值赋予 MainActivity 布局文件(.xml)中的(singup)按钮

<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 等其他工具来轻松快速地连接......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2018-10-30
    • 2018-01-22
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 2016-08-21
    相关资源
    最近更新 更多