我正在开发一个应用程序,我需要在其中同时更新 2 个 PHP 数据库。从第一个 PHP DB 中,我得到需要在主屏幕上显示的数据,因此它在 onPostExecute 中处理。但是对于第二个 PHP 数据库,我需要检查并更新其中的记录,我不知道如何在一个 Java 程序中执行多个 PHP 请求。代码如下:
Java代码
public class BackgroundTask extends AsyncTask<String, Void, String> {
String json_url;
Context context;
public BackgroundTask (Context c) { context = c;}
public BackgroundTask() {
}
@Override
protected String doInBackground(String... params) {
String type = params[0];
String login_url = "... my link ..."; // to get data of the user
if (type.equals("login")) {
try {
String user_name = params[1];
URL url = new URL(login_url);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
OutputStream outputStream = httpURLConnection.getOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
String post_data = URLEncoder.encode("user_name", "UTF-8") + "=" + URLEncoder.encode(user_name, "UTF-8");
bufferedWriter.write(post_data);
bufferedWriter.flush();
bufferedWriter.close();
outputStream.close();
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "iso-8859-1"));
StringBuilder stringBuilder = new StringBuilder();
String results = "";
String line = "";
while ((STRING_JSON = bufferedReader.readLine()) != null) {
results += line;
stringBuilder.append(STRING_JSON + "\n");
}
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect();
//connectionStatus = true;
Log.i("doInBackgroundTry->try", "stringbuilder in the end is " + stringBuilder.toString());
master_string = stringBuilder.toString().trim();
return stringBuilder.toString().trim();
} catch (MalformedURLException e) {
Toast.makeText(context, "malformed exception error is " + e.toString(), Toast.LENGTH_LONG).show();
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
@Override
public void onPreExecute() {
json_url = " ... my link ...";
}
@Override
public void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
@Override
public void onPostExecute(String result) {
// random updation of the UI
}
}
所有第二个 PHP 数据库都有一个 ID,将检查它是否已经在表中,如果已经存在则什么都不会发生,但如果不存在则将其添加到数据库中。
最佳答案
首先,当调用 execute 时,您必须通过某个函数传递类型。您可以再次执行此操作,但使用不同的类型来处理您的第二个查询。例如:
public class BackgroundTask extends AsyncTask<String, Void, String> {
String json_url;
Context context;
public BackgroundTask (Context c) { context = c;}
public BackgroundTask() {
}
@Override
protected String doInBackground(String... params) {
String type = params[0];
String login_url = "... my link ..."; // to get data of the user
if (type.equals("login")) {
return null;
}
else if (type.equals("second_query_type")
{
// bla bla bla
// random code bla bla bla
// if you are not going to update your UI, then just return null here
}
@Override
public void onPreExecute() {
json_url = " ... my link ...";
}
@Override
public void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
@Override
public void onPostExecute(String result) {
// random updation of the UI
}
}
现在,您可以使用三种方法执行第二个查询。
方法一:通过函数执行execute
public void second_query_type(String type)
{
new BackgroundTask(type);
}
方法二:创建后台任务对象并调用execute函数
BackgroundTask bt = new BackgroundTask();
bt.execute("second_query")'
方法三:如果这个类在另一个类里面,就用这种方式
new BackgroundTask.execute(type);
如果您有任何其他问题,请随时提出...
关于php - 通过一个 Java 异步任务连接到多个 PHP 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42864784/