【问题标题】:Connecting Android App with Database on Remote Server将 Android 应用程序与远程服务器上的数据库连接起来
【发布时间】:2016-06-22 00:24:39
【问题描述】:

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

https://www.youtube.com/watch?v=WgOSIEWOXbQ

应用中有以下 2 个活动

  1. 主要活动(启动器活动)
    包含一个“添加联系人”按钮,单击该按钮,将打开“添加信息”活动。
  2. Add Info Activity
    包含 3 个编辑文本和一个“保存数据”按钮,单击该按钮,“保存信息”方法调用。

公共类 AddInfo 扩展 Activity {

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();
    }
}

}

【问题讨论】:

    标签: php android database cloud


    【解决方案1】:

    可能存在 POST 问题。 您可以使用 Volley 库。

    添加到gradle中

    dependencies {
        compile 'com.mcxiaoke.volley:library:1.0.19'
    }
    

    为帖子添加 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);
    

    【讨论】:

      【解决方案2】:

      我已经观看了您提到的视频,并考虑到它在服务器端与 PHP 代码一起工作的假设,我最好的猜测是客户端应用程序无法进行必要的通信。因此,要么根本没有发生通信,要么没有正确发送参数。如果有任何类型的请求以确保至少通信成功发生,您应该更容易将虚拟数据转储到数据库中。但更可靠的方法是在客户端检查您的网络流量。

      现在,有几种解决方案可以调试您的应用程序并检查 http 流量。最新的是Stetho,这是一个开源调试平台,由 Facebook 开发,为 Android 开发者提供丰富且高度交互的调试体验。但这需要您在客户端进行一些必要的更改,如果您有兴趣,tutorial 可以为您提供帮助。

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

      希望对你有帮助!

      【讨论】:

      • 我会按照您的建议行事。让我们看看发生了什么。谢谢你:)
      猜你喜欢
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      • 2012-04-03
      • 1970-01-01
      • 2017-09-14
      • 2019-03-10
      • 1970-01-01
      相关资源
      最近更新 更多