Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将Android应用程序与远程服务器上的数据库连接_Php_Android_Database_Cloud - Fatal编程技术网

Php 将Android应用程序与远程服务器上的数据库连接

Php 将Android应用程序与远程服务器上的数据库连接,php,android,database,cloud,Php,Android,Database,Cloud,我正在尝试访问远程服务器上的数据库。数据库很好,因为它可以与php代码配合使用,但当我尝试使用android应用程序在该数据库中添加数据时,数据不会插入数据库。 为此,我基本上遵循了以下教程 应用程序中有以下2项活动 主要活动(启动器活动) 包含一个“添加联系人”按钮,单击该按钮,将打开“添加信息”活动 包含3个编辑文本和一个“保存数据”按钮,单击该按钮可调用“保存信息”方法 公共类AddInfo扩展活动{ EditText editTextName, editTextEmail, edit

我正在尝试访问远程服务器上的数据库。数据库很好,因为它可以与php代码配合使用,但当我尝试使用android应用程序在该数据库中添加数据时,数据不会插入数据库。 为此,我基本上遵循了以下教程

应用程序中有以下2项活动

  • 主要活动(启动器活动)
    包含一个“添加联系人”按钮,单击该按钮,将打开“添加信息”活动

  • 包含3个编辑文本和一个“保存数据”按钮,单击该按钮可调用“保存信息”方法
  • 公共类AddInfo扩展活动{

    EditText editTextName, editTextEmail, editTextMobile;
    
    String strName, strEmail, strMobile;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.add_info_layout);
    
        editTextName = (EditText)findViewById(R.id.editTextName);
        editTextEmail = (EditText)findViewById(R.id.editTextEmail);
        editTextMobile = (EditText)findViewById(R.id.editTextMobile);
    }
    
    public void saveInfo (View view)
    {
        strName = editTextName.getText().toString();
        strEmail = editTextEmail.getText().toString();
        strMobile = editTextMobile.getText().toString();
    
        BackgroundTask backgroundTask = new BackgroundTask();
        backgroundTask.execute(strName, strEmail, strMobile);
        finish();
    }
    
    class BackgroundTask extends AsyncTask<String,Void,String>
    {
        String add_info_url;
        @Override
        protected void onPreExecute() {
            add_info_url = "sisuol.move.pk/add_info.php";
        }
    
        @Override
        protected String doInBackground(String... params) {
            String name, email, mobile;
    
            name = params[0];
            email = params[1];
            mobile = params[2];
    
            try
            {
                URL url = new URL(add_info_url);
    
                HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                httpURLConnection.setRequestMethod("POST");
                httpURLConnection.setDoOutput(true);
    
                OutputStream outputStream = httpURLConnection.getOutputStream();
    
                BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
    
                String data_string = URLEncoder.encode("name","UTF-8")+"="+URLEncoder.encode(name, "UTF-8")+"&"+
                        URLEncoder.encode("email","UTF-8")+"="+URLEncoder.encode(email, "UTF-8")+"&"+
                        URLEncoder.encode("mobile","UTF-8")+"="+URLEncoder.encode(mobile, "UTF-8");
    
                bufferedWriter.write(data_string);
                bufferedWriter.flush();
                bufferedWriter.close();
    
                outputStream.close();
    
                InputStream inputStream = httpURLConnection.getInputStream();
                inputStream.close();
    
                httpURLConnection.disconnect();
    
                return "One row of data inserted!";
            }
            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(getApplicationContext(), result, Toast.LENGTH_LONG).show();
        }
    }
    
    EditText-editTextName、editTextEmail、editTextMobile;
    字符串strName、strEmail、strMobile;
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.add_info_layout);
    editTextName=(EditText)findViewById(R.id.editTextName);
    editTextEmail=(EditText)findViewById(R.id.editTextEmail);
    editTextMobile=(EditText)findViewById(R.id.editTextMobile);
    }
    公共void saveInfo(视图)
    {
    strName=editTextName.getText().toString();
    strEmail=editTextEmail.getText().toString();
    strMobile=editTextMobile.getText().toString();
    BackgroundTask BackgroundTask=新的BackgroundTask();
    执行(strName、strEmail、strMobile);
    完成();
    }
    类BackgroundTask扩展了AsyncTask
    {
    字符串add\u info\u url;
    @凌驾
    受保护的void onPreExecute(){
    add_info_url=“sisuol.move.pk/add_info.php”;
    }
    @凌驾
    受保护的字符串doInBackground(字符串…参数){
    字符串名称、电子邮件、手机;
    name=params[0];
    email=params[1];
    mobile=params[2];
    尝试
    {
    URL URL=新URL(添加信息URL);
    HttpURLConnection HttpURLConnection=(HttpURLConnection)url.openConnection();
    httpURLConnection.setRequestMethod(“POST”);
    httpURLConnection.setDoOutput(true);
    OutputStream OutputStream=httpURLConnection.getOutputStream();
    BufferedWriter BufferedWriter=新的BufferedWriter(新的OutputStreamWriter(outputStream,UTF-8));
    字符串数据\u String=URLEncoder.encode(“名称”、“UTF-8”)+“=”+URLEncoder.encode(名称,“UTF-8”)+“&”+
    URLEncoder.encode(“电子邮件”,“UTF-8”)+”=“+URLEncoder.encode(电子邮件,“UTF-8”)+”&”+
    urlcoder.encode(“移动”,“UTF-8”)+“=”+urlcoder.encode(移动,“UTF-8”);
    bufferedWriter.write(数据字符串);
    bufferedWriter.flush();
    bufferedWriter.close();
    outputStream.close();
    InputStream InputStream=httpURLConnection.getInputStream();
    inputStream.close();
    httpURLConnection.disconnect();
    返回“插入一行数据!”;
    }
    捕获(格式错误)
    {
    e、 printStackTrace();
    }
    捕获(IOE异常)
    {
    e、 printStackTrace();
    }
    返回null;
    }
    @凌驾
    受保护的void onProgressUpdate(void…值){
    super.onProgressUpdate(值);
    }
    @凌驾
    受保护的void onPostExecute(字符串结果){
    Toast.makeText(getApplicationContext(),result,Toast.LENGTH_LONG.show();
    }
    }
    
    }可能会出现POST问题。 你可以使用截击库

    添加到渐变中

    dependencies {
        compile 'com.mcxiaoke.volley:library:1.0.19'
    }
    
    为post添加JAVA代码

        RequestQueue queue = Volley.newRequestQueue(this);
    
        StringRequest request = new StringRequest(Request.Method.POST, "Your URL",
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        // Do something
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        progressDialog.dismiss();
                        onLoginFailed();
                    }
                }){
                @Override
                protected Map<String,String> getParams(){
                    Map<String,String> params = new HashMap<String, String>();
                    // Add your Params Here.
                    //params.put("email", email);
                    //params.put("password",password);
    
                    return params;
                }
        };
    
        queue.add(request);
    
    RequestQueue queue=Volley.newRequestQueue(this);
    StringRequest=新建StringRequest(request.Method.POST,“您的URL”,
    新的Response.Listener(){
    @凌驾
    公共void onResponse(字符串响应){
    //做点什么
    }
    },new Response.ErrorListener(){
    @凌驾
    公共无效onErrorResponse(截击错误){
    progressDialog.disclose();
    onLoginFailed();
    }
    }){
    @凌驾
    受保护的映射getParams(){
    Map params=新的HashMap();
    //在这里添加您的参数。
    //参数put(“电子邮件”,电子邮件);
    //参数put(“密码”,密码);
    返回参数;
    }
    };
    添加(请求);
    
    我看过你提到的视频,考虑到服务器端的PHP代码可以正常工作,我的最佳猜测是客户端应用程序无法进行必要的通信。因此,要么通信根本没有发生,要么没有正确发送参数。若存在任何类型的请求以确保至少成功地进行通信,那个么在数据库中转储虚拟数据应该会更容易。但更可靠的方法是在客户端检查您的网络流量

    现在,有几种解决方案可以调试应用程序并检查http流量。最新的一个是由Facebook开发的开源调试平台,它为Android开发者提供了丰富且高度互动的调试体验。但这需要你们在客户端做一些必要的改变,若你们感兴趣的话,这会对你们有所帮助

    否则,若你们想节省时间和精力,那个么我建议你们使用这个工具,这个和这些基本的应该是非常有用的。Charles基本上是一个web代理(HTTP代理/HTTP监视器),您将在计算机上安装它,它将能够为您记录和显示发送和接收的所有数据。从本质上讲,这将使您能够轻松查看web浏览器/客户端和服务器之间的请求、响应和HTTP头(其中包含cookie和缓存信息)。它最终可以帮助您跟踪问题并解决它

    希望有帮助

    我将根据你的意见行事