2016-03-08 221 views
0

我正在嘗試訪問遠程服務器上的數據庫。數據庫是好的,因爲它可以很好地使用php代碼,但是當我嘗試使用android應用程序在該數據庫中添加數據時,數據不會插入到數據庫中。 我已經基本遵循以下教程用於此目的將Android應用程序連接到遠程服務器上的數據庫

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

有以下的應用2個活動

  1. 主要活動(發射活動)
    包含一個按鈕「添加聯繫人」,點擊「添加信息」活動即會打開。
  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(); 
    } 
} 

}

回答

0

有可能是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); 
0

我看過你提到的視頻和考慮這個假設,它正常工作與服務器端的PHP代碼,我最好的猜測是,客戶端應用程序無法做必要的溝通。所以,通信根本沒有發生,或者它沒有正確地發送參數。如果存在任何類型的請求以確保至少通信成功發生,那麼將數據庫中的虛擬數據轉儲應該更容易。但更堅實的方法是檢查客戶端的網絡流量。

現在,有幾種解決方案來調試您的應用程序並檢查http流量。最新的是Stetho,這是一個由Facebook開發的開源調試平臺,它爲Android開發人員提供了豐富且高度互動的調試體驗。但它會要求你在客戶端做一些必要的修改,如果你對此感興趣,那麼tutorial可以幫到你。

否則,如果你想節省時間和精力,那麼我會建議使用CharlesProxy工具,而這tutorial和這些基本config steps應該是非常有用的。 Charles基本上是一個Web代理(HTTP代理/ HTTP監視器),您將在您的計算機上安裝它,並且它將能夠記錄並顯示發送和接收的所有數據。它基本上可以讓您輕鬆查看Web瀏覽器/客戶端和服務器之間的請求,響應和HTTP標頭(包含Cookie和緩存信息)。它最終可以幫助您追蹤問題並修復問題。

希望它有幫助!

+0

我會根據您的建議採取行動。讓我們看看發生了什麼。謝謝 :) –

相關問題