2017-03-17 4 views
2

私は2つのPHPデータベースを同時に更新する必要のあるアプリケーションを開発しています。最初のPHP DBから、私はメイン画面に表示する必要があるデータを取得するので、onPostExecuteで処理されます。しかし、2番目のPHP DBでは、私がそこにあるレコードをチェックして更新する必要があります.1つのJavaプログラムで複数のPHPリクエストを実行する方法を理解できません。以下のコードは次のとおりです。1つの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 DBを持っているが、それは表にすでにだったかどうかは、その後何も起こらないだろうが、場合であれば、チェックされるIDですそれはDBに追加されませんでした。

+0

あなたはタイプ変数を変更することができます。実行しているときと同じように、PHPコードを使用するメソッドの型を伝える必要があります。if(type.equals( "login"))を次のように追加して変更できます。else if(type.equals ( "second_query"))... –

+0

もっと手の込んだことができますか? –

+0

私は答えを投稿します、私は私のアプローチが正しいと確信しています。しばらくお待ちください... –

答えて

1

まず、executeを呼び出すときには、関数を介して型を渡す必要があります。もう一度やり直すことはできますが、2番目のクエリを処理するためには別のタイプを使用します。例:

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 

    } 
} 

ここで、3つの方法を使用して2番目のクエリを実行できます。

方法1:

BackgroundTask bt = new BackgroundTask(); 
bt.execute("second_query")' 

機能実行方法3をバックグラウンドタスクのオブジェクトを作成し、呼び出し:実行機能

public void second_query_type(String type) 
{ 
new BackgroundTask(type); 
} 

方法2を介して実行する場合このクラスは別のクラスの中にあり、この方法で使用します

+0

素敵な答えの男、ありがとうたくさんの仲間は本当にもう一度私をもう一度助けました:) –

関連する問題