我使用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');";
?>
我编辑了我的帖子..我试图输入没有图像的信息。数据库中的一个字段是Autoincrement,所以我不会为此提供数据。只是从用户处获得的其他人。 – user3650467
我正在测试一个真实的设备,并试图连接到WAMP上的MySQL。根据其他帖子,我用我的手机IP,但它只是跳转到下一个活动,而不插入数据库。有什么建议么? @Abdulhamid Dhaiban – user3650467