php - 通过一个 Java 异步任务连接到多个 PHP 代码

标签 php android database

我正在开发一个应用程序,我需要在其中同时更新 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/

相关文章:

php - Woocommerce 添加到购物车未显示在可变产品上

php - 从 html 表单发布到 onesignal php Api?

PHP 到 CSV 输出下载

php - 带有 Xampp 错误的符号链接(symbolic link)

android - Android 上独立于系统时钟的循环计时器

android - 如何在 webview 中显示 Android Google 默认搜索结果?

database - 如果我有关系 R(A,B,C,D,E) 并且 FD 是 A -> C,AB -> D,CD -> E,E 是否完全依赖于 AB?

mysql - 如何更改我的 sql 以在 mysql 中的 MySql 存储过程中循环?

android - 从 Activity Kotlin 中获取额外的字符串

database - 如何创建具有 2 个不同长度或多个符号列的表的数据库?