【问题标题】:Adding data into Mysql database on localhost在本地主机上将数据添加到 Mysql 数据库中
【发布时间】:2017-02-07 07:48:13
【问题描述】:

我正在尝试创建注册表单,但应用程序不断崩溃 我认为这可能是我的虚拟模拟器的 URL,我尝试了 10.0.2.2 和 10.0.3.2,我检查了虚拟框以查看要使用的地址,我得到了 192.168.79.2,但它们都不起作用。

这是我的 BackgroundTask.java

 public class BackgroundTask extends  
                  AsyncTask<String,Void,String> {

    Context ctx;
    BackgroundTask(Context ctx){

        this.ctx=ctx;
    }
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
    @Override
    protected String doInBackground(String... params) {
        String method= params[0];
        String reg_url="http://192.168.79.2/webapp/register.php";
       // String login_url="http://10.0.2.2/webapp/login.php";

        if(method.equals("register")){
            String names=params[1];
            String user_name=params[2];
            String user_pass=params[3];
            try {
                URL url= new URL(reg_url);
                HttpsURLConnection httpsURLConnection = (HttpsURLConnection)  

                url.openConnection();
                httpsURLConnection.setRequestMethod("POST");
                httpsURLConnection.setDoOutput(true);
                OutputStream OS=httpsURLConnection.getOutputStream();
                BufferedWriter bufferedWriter =new BufferedWriter(new   

             OutputStreamWriter(OS, "UTF-8"));

                String data = URLEncoder.encode("user", "UTF-8")+"="+URLEncoder.encode(names, "UTF-8")+"&"+
                        URLEncoder.encode("user_name", "UTF-8")+"="+URLEncoder.encode(user_name, "UTF-8")+"&"+
                        URLEncoder.encode("user_pass", "UTF-8")+"="+URLEncoder.encode(user_pass, "UTF-8");

                bufferedWriter.write(data);
                bufferedWriter.flush();
                OS.close();
                InputStream IS = httpsURLConnection.getInputStream();
                IS.close();
                return "Registration success";

            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            ;
        }
        return null;
    }
    @Override
    protected void onProgressUpdate(Void... values) {
        super.onProgressUpdate(values);
    }
    @Override
    protected void onPostExecute(String result) {
        Toast.makeText(ctx,"result" ,Toast.LENGTH_LONG).show();
    }
}

这是我的 Register.java 活动

public class Register extends Activity {

    EditText ET_NAME, ET_USER_NAME, ET_USER_PASS;
    String name, user_name, user_pass;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

        ET_NAME=(EditText) findViewById(R.id.name);
        ET_USER_NAME=(EditText) findViewById(R.id.username);
        ET_USER_PASS=(EditText) findViewById(R.id.pass);

    }

    public void userReg(View view){

        name= ET_NAME.getText().toString();
        user_name=ET_USER_NAME.getText().toString();
        user_pass=ET_USER_PASS.getText().toString();

        String method= "register";
        BackgroundTask backgroundTask = new BackgroundTask(this);
        backgroundTask.execute(method, name, user_name, user_pass);
        finish();

    }

}

这是我的 register.php 文件

<?php
require"init.php";

$names=$_POST["names"];
$user_name=$_POST["user_name"];
$user_pass=$_POST["user_pass"];

$sql_query="insert into info values('$names', '$user_name', '$user_pass');";

if(mysqli_query($con, $sql_query)){

//echo"<h3>Data insertion Success...</h3>";
}
else{
//echo"Data insertion error...".mysqli_error($con);
}
?>

【问题讨论】:

  • 你的端口是什么?例如,我有 10.0.2.2:57714 然后 57714 是我的端口并在您的模拟器中检查应用程序
  • 如何找到这个端口?以前从未尝试过!
  • 试试这个:10.0.2.2:80/webapp/register.php 告诉我它对你有用吗?
  • 10.0.3.2 工作我的导入出现问题

标签: php android mysql localhost wampserver


【解决方案1】:

谢谢@lefsFlare,我的导入有问题

我更改自:javax.net.ssl.HttpsURLConnection; 至:java.net.HttpURLConnection;

【讨论】:

    【解决方案2】:

    将异步任务调用为

    ArrayList<String> params = new ArrayList<String>();
                            params.add(name);
                            params.add(userId);
                            params.add(passw);
                            new registerTask().execute(params);
    

    试试这个:

     public class registerTask extends AsyncTask<ArrayList<String>, Void, ArrayList<String>> {
    
                @Override
                protected void onPreExecute() {
                    progress1.setVisibility(View.VISIBLE);
                }
    
                protected ArrayList<String> doInBackground(ArrayList<String>... passing) {
                    ArrayList<String> result = new ArrayList<String>();
                    HttpClient httpclient = new DefaultHttpClient();
                    HttpPost httppost = new HttpPost("http://192.168.79.2/webapp/register.php");
                    String responses = null;
                    ArrayList<String> data = passing[0];
                    String name = data.get(0);
                    String uid = data.get(1);
                    String passw = data.get(2);
                    int ik;
                    try {
                        //add data
                        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
                        nameValuePairs.add(new BasicNameValuePair("names", name));
                        nameValuePairs.add(new BasicNameValuePair("user_name", uid));
                        nameValuePairs.add(new BasicNameValuePair("user_pass", passw));
                        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                        //execute http post
                        HttpResponse response = httpclient.execute(httppost);
    //You will get the response from server in response
                        HttpEntity entity = response.getEntity();
                        String content = EntityUtils.toString(entity);
                    } catch (ClientProtocolException e) {
                    } catch (IOException e) {
                    }
                    return "Success"; //return result
                }
    
                protected void onPostExecute(ArrayList<String> result) {
                }
            }
    

    我不知道我是否错过了什么...... 试试这个吧..

    【讨论】:

      【解决方案3】:

      您的解决方案

      据我所知,第一行应该是URLEncoder.encode("user", "UTF-8") 吗?很明显,您的 PHP 表单显示 $names=$_POST["names"];,这意味着 POST 变量应该names

      如果您的数据库未配置空变量,则会出错。

      String data = URLEncoder.encode("user", "UTF-8")+"="+URLEncoder.encode(names, "UTF-8")+"&"+
                    URLEncoder.encode("user_name", "UTF-8")+"="+URLEncoder.encode(user_name, "UTF-8")+"&"+
                    URLEncoder.encode("user_pass", "UTF-8")+"="+URLEncoder.encode(user_pass, "UTF-8");
      

      【讨论】:

      • 将感谢您修复它,但无论如何它崩溃了我运行调试器并在“httpsURLConnection.setRequestMethod("POST");"这一行崩溃
      • @OdeyM.Khalaf 调试器说什么?
      • @OdeyM.Khalaf 这很奇怪,你能把你的堆栈跟踪贴到你的帖子末尾吗?
      • 我认为这是错误的,我给了你错误的信息: 原因:java.lang.ClassCastException: com.android.okhttp.internal.huc.HttpURLConnectionImpl 不能转换为 javax.net.ssl .HttpsURLConnection
      • 好的,你能贴上你的进口吗?我认为您可能导入了错误的包,但我不确定。
      猜你喜欢
      • 2019-06-10
      • 1970-01-01
      • 2017-01-15
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      • 2014-05-26
      • 2017-07-14
      相关资源
      最近更新 更多