将Android应用程序连接到远程服务器上的数据库
我正在尝试访问远程服务器上的数据库。数据库是好的,因为它可以很好地使用php代码,但是当我尝试使用android应用程序在该数据库中添加数据时,数据不会插入到数据库中。 我已经基本遵循以下教程用于此目的将Android应用程序连接到远程服务器上的数据库
https://www.youtube.com/watch?v=WgOSIEWOXbQ
有以下的应用2个活动
- 主要活动(发射活动)
包含一个按钮“添加联系人”,点击“添加信息”活动即会打开。 -
Add Info Activity
包含3个编辑文本和一个按钮'保存数据',点击'saveInfo'方法调用。
公共类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();
}
}
}
有可能是POST问题。 您可以使用Volley Library。
添加到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);
我看过你提到的视频和考虑这个假设,它正常工作与服务器端的PHP代码,我最好的猜测是,客户端应用程序无法做必要的沟通。所以,通信根本没有发生,或者它没有正确地发送参数。如果存在任何类型的请求以确保至少通信成功发生,那么将数据库中的虚拟数据转储应该更容易。但更坚实的方法是检查客户端的网络流量。
现在,有几种解决方案来调试您的应用程序并检查http流量。最新的是Stetho,这是一个由Facebook开发的开源调试平台,它为Android开发人员提供了丰富且高度互动的调试体验。但它会要求你在客户端做一些必要的修改,如果你对此感兴趣,那么tutorial可以帮到你。
否则,如果你想节省时间和精力,那么我会建议使用CharlesProxy工具,而这tutorial和这些基本config steps应该是非常有用的。 Charles基本上是一个Web代理(HTTP代理/ HTTP监视器),您将在您的计算机上安装它,并且它将能够记录并显示发送和接收的所有数据。它基本上可以让您轻松查看Web浏览器/客户端和服务器之间的请求,响应和HTTP标头(包含Cookie和缓存信息)。它最终可以帮助您追踪问题并修复问题。
希望它有帮助!
我会根据您的建议采取行动。让我们看看发生了什么。谢谢 :) –