2016-08-21 51 views
0

我使用PHP作爲webservice,Android Studio 2.1.2在Physiacal設備(Android 4.4.2)上測試,將多個字段插入到MySQL數據庫中。我有一個數據庫交互的後臺任務。我不希望下一個活動顯示出來,直到所有數據庫條目都已經完成。是否有一些代碼可以在onPostExucte()或其他地方使用,只需在插入信息後打開Activity即可。 我使用日在onPostExecute()下面的代碼:多種操作的後臺任務 - Android

Intent intent = new Intent(ctx, Dashboard.class ); 
    ctx.startActivity(intent); 

但它跳到另一個活動,然後在幾秒鐘後打開下一個活動。

第二個問題我正在將所有其他信息攜帶到DB中。我有一個通過從設備中獲取圖像獲取的URI。現在從我的研究中我知道這個URI必須變成位圖,而這又必須變成Base64,對嗎?我可以直接發送URI嗎?我正在嘗試使用數據庫後臺任務來格式化URI,我嘗試過使用另一個後臺任務,但我必須做錯了什麼。

我想插入沒有圖像,現在我得到ArrayIndexOutOfBoundsException錯誤,它指向後臺任務中的一行,我有一個參數發送到數據庫。可設置的參數數量是否有限制?

後臺任務:使用後臺任務

package name; 
import statements; 

public class BackgroundTask extends AsyncTask<String, Void, String> { 
//Constructor needed to pass info into the BackgroundTask 
Context ctx; 
BackgroundTask(Context ctx){ 
    this.ctx = ctx; 
} 


@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
} 

@Override 
protected String doInBackground(String... params) { 
    //from this method pass info into MySQL DB 
    String reg_url = "http://ipaddress/folder/phpscript.php"; 
    String method = params[0]; 
    if (method.equals("register")){ 
     String fname = params[1]; 
     String lname = params[2]; 
     String age = params[3]; 
     String mobnum = params[4]; 
     String homenum = params[5]; 
     String email = params[6]; 
     String city = params[7]; 
     String country = params[8]; 
     String gender = params[9]; 
     String dob = params[10]; 

     try { 
      URL url = new URL(reg_url); 
      HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection(); 
      httpURLConnection.setRequestMethod("POST"); 
      httpURLConnection.setDoOutput(true); 
      OutputStream OS = httpURLConnection.getOutputStream(); 
      BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(OS,"UTF-8")); 

      String data = URLEncoder.encode("user","UTF-8")+"="+URLEncoder.encode(fname,"UTF-8")+"&"+ 
        URLEncoder.encode("lname","UTF-8")+"="+URLEncoder.encode(lname,"UTF-8")+"&"+ 
        URLEncoder.encode("age","UTF-8")+"="+URLEncoder.encode(age,"UTF-8")+"&"+ 
        URLEncoder.encode("mobnum","UTF-8")+"="+URLEncoder.encode(mobnum,"UTF-8")+"&"+ 
        URLEncoder.encode("homenum","UTF-8")+"="+URLEncoder.encode(homenum,"UTF-8")+"&"+ 
        URLEncoder.encode("email","UTF-8")+"="+URLEncoder.encode(email,"UTF-8")+"&"+ 
        URLEncoder.encode("city","UTF-8")+"="+URLEncoder.encode(city,"UTF-8")+"&"+ 
        URLEncoder.encode("country","UTF-8")+"="+URLEncoder.encode(country,"UTF-8")+"&"+ 
        URLEncoder.encode("gender","UTF-8")+"="+URLEncoder.encode(gender,"UTF-8")+"&"+ 
        URLEncoder.encode("dob","UTF-8")+"="+URLEncoder.encode(dob,"UTF-8"); 

      bufferedWriter.write(data); 
      bufferedWriter.flush(); 
      bufferedWriter.close(); 
      OS.close(); 
      InputStream IS = httpURLConnection.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) { 
    Intent intent = new Intent(ctx, Dashboard.class ); 
    ctx.startActivity(intent); 

} 
} 

活動(按鍵採用了Android:的onClick調用的方法):

public void userReg(View view){ 
//initialise variables by retreiving user input 
    fname = ET_fname.getText().toString(); 
    lname = ET_lname.getText().toString(); 
    mobnum = ET_mobnum.getText().toString(); 
    homenum = ET_homenum.getText().toString(); 
    email =ET_email.getText().toString(); 
    city = ET_city.getText().toString(); 
    country = ET_country.getText().toString(); 
    gender = ET_gender.getText().toString(); 

    //pass info into the BackgroundTask 
    String method ="register"; 
    BackgroundTask backgroundTask = new BackgroundTask(this); 
    backgroundTask.execute(method, fname, lname, String.valueOf(age), mobnum, homenum, email, city, country, gender, dob); 
    finish(); 
} 

基本上我希望能夠插入信息以及將圖像導入數據庫。

PHP Web服務:

<?php 

require "init.php"; 

$fname=$_POST["user"]; 
$lname=$_POST["lname"]; 
$age=$_POST["age"]; 
$mobnum=$_POST["mobnum"]; 
$hnum=$_POST["homenum"]; 
$email=$_POST["email"]; 
$city=$_POST["city"]; 
$country=$_POST["country"]; 
$gender=$_POST["gender"]; 
$dob=$_POST["dob"]; 

$sql_query="insert into teacher_information values('$fname','$lname','$age','$mobnum','$hnum','$email','$city','$country','$gender', '$dob');"; 

?> 

回答

0

首先,你可以打電話給活動的方法onPostExecute()。 通過構造函數發送前一個上下文。 然後使用以下代碼中的方法:

Intent intent = new Intent(cotenxt, NextActivity.class); 
context.startActivity(intent); 

其次, 參見this answer上傳圖像到PHP服務。

+0

我編輯了我的帖子..我試圖輸入沒有圖像的信息。數據庫中的一個字段是Autoincrement,所以我不會爲此提供數據。只是從用戶處獲得的其他人。 – user3650467

+0

我正在測試一個真實的設備,並試圖連接到WAMP上的MySQL。根據其他帖子,我用我的手機IP,但它只是跳轉到下一個活動,而不插入數據庫。有什麼建議麼? @Abdulhamid Dhaiban – user3650467