2016-06-20 3 views
0

Spinnerの値をPHPに渡して結果を取得してTextViewに表示したいとします。 Toastを使用してSelected値を表示すると、PHPファイルに値を渡している間にperfect.butを実行しています。私はいくつかの方法を試しました。いくつか私の問題を解決することができます。Spinnerの値をphpファイルに初めて送信している間に、その作業のみ

javaファイル:

<?php 
require "db_config.php"; 
$Goods_name=$_POST['Goods_name']; 
$sql = "select goods_min_level from Finish_goods_mas where Goods_name='".$Goods_name."'"; 
$stmt = sqlsrv_query($conn, $sql); 
if($stmt === false) { 
    die(print_r(sqlsrv_errors(), true)); 
} 

while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { 
     //echo $row['cus_id']."<br />"; 
     $json['Finish_goods_mas'][]=$row; 
} 

sqlsrv_free_stmt($stmt); 

echo json_encode($json); 
?> 

は、後のスピナーの値はPHPファイルに渡されませdoInBackgroundonPreExecute()の変更を行い

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getSupportActionBar().hide(); //<< this for hide title bar 
     setContentView(R.layout.sales_order); 

    fg.setOnItemSelectedListener(
        new AdapterView.OnItemSelectedListener() { 
         public void onItemSelected(
           AdapterView<?> parent, View view, int position, long id) { 
          if(goods_name1.getSelectedItem() !=null && goods_name1.getSelectedItem() !=""){ 
           // WebServer Request URL 
           String serverURL = "http://IP/fs/getProductOneStock.php"; 
           // Use AsyncTask execute Method To Prevent ANR Problem 
           new LongOperation().execute(serverURL); 
          } 
         } 

         public void onNothingSelected(AdapterView<?> parent) { 
          showToast("Spinner1: unselected"); 
         } 
        }); 
} 

// Class with extends AsyncTask class 
    private class LongOperation extends AsyncTask<String, Void, Void> { 

     // Required initialization 
     private final HttpClient Client = new DefaultHttpClient(); 
     private String Content; 
     private String Error = null; 
     private ProgressDialog Dialog = new ProgressDialog(Sales_Order.this); 
     String data =""; 
     int sizeData = 0; 
     TextView pro_stock1 = (TextView)findViewById(R.id.tv_stock1); 
     Spinner fgStock = (Spinner)findViewById(R.id.spinner1); 

     protected void onPreExecute() { 
      // NOTE: You can call UI Element here. 
      //Start Progress Dialog (Message) 

      Dialog.setMessage("Please wait.."); 
      Dialog.show(); 

      try{ 
       // Set Request parameter 
       data +="&" + URLEncoder.encode("data", "UTF-8") + "="+fgStock.getSelectedItem(); 

      } catch (UnsupportedEncodingException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

     // Call after onPreExecute method 
     protected Void doInBackground(String... urls) { 
      /************ Make Post Call To Web Server ***********/ 
      BufferedReader reader=null; 
      // Send data 
      try 
      { 
       // Defined URL where to send data 
       URL url = new URL(urls[0]); 
       // Send POST data request 
       URLConnection conn = url.openConnection(); 
       conn.setDoOutput(true); 
       OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
       wr.write(data); 
       wr.flush(); 
       // Get the server response 
       reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
       StringBuilder sb = new StringBuilder(); 
       String line = null; 
       // Read Server Response 
       while((line = reader.readLine()) != null) 
       { 
        // Append server response in string 
        sb.append(line + ""); 
       } 
       // Append Server Response To Content String 
       Content = sb.toString(); 
      } 
      catch(Exception ex) 
      { 
       Error = ex.getMessage(); 
      } 
      finally 
      { 
       try 
       { 
        reader.close(); 
       } 
       catch(Exception ex) {} 
      } 
      return null; 
     } 

     protected void onPostExecute(Void unused) { 
      // NOTE: You can call UI Element here. 

      // Close progress dialog 
      Dialog.dismiss(); 

      if (Error != null) { 

       pro_stock1.setText("Output : "+Error); 

      } else { 

       // Show Response Json On Screen (activity) 
       pro_stock1.setText(Content); 

       /****************** Start Parse Response JSON Data *************/ 

       String OutputData = ""; 
       JSONObject jsonResponse; 

       try { 

        /****** Creates a new JSONObject with name/value mappings from the JSON string. ********/ 
        jsonResponse = new JSONObject(Content); 

        /***** Returns the value mapped by name if it exists and is a JSONArray. ***/ 
        /******* Returns null otherwise. *******/ 
        JSONArray jsonMainNode = jsonResponse.optJSONArray("Finish_goods_mas"); 

        /*********** Process each JSON Node ************/ 

        int lengthJsonArr = jsonMainNode.length(); 

        for(int i=0; i < lengthJsonArr; i++) 
        { 
         /****** Get Object for each JSON node.***********/ 
         JSONObject jsonChildNode = jsonMainNode.getJSONObject(i); 

         /******* Fetch node values **********/ 
         String Stock1 = jsonChildNode.optString("Finish_goods_mas").toString(); 
         OutputData += Stock1; 


        } 
        /****************** End Parse Response JSON Data *************/ 

        //Show Parsed Output on screen (activity) 
        //jsonParsed.setText(OutputData); 

       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 

    } 

私のPHPファイルはまた、私はPHPからの結果を取り戻すことはできません

+0

によりShowProStock 'メソッド'にonPostExecute(結果)オーバーライドメソッドでそれを行う '' –

+0

がどのように私は()メソッドは、サーバからJSONを取得するために使用され – Karthi

+0

ShowProStockを行うことができdoInBackground – Karthi

答えて

0

非同期タスクが実行されると、タスクは4つのステップを実行します。

1.onPreExecute()は、タスクが実行される前にUIスレッドで呼び出されます。このステップは通常、タスクを設定するために使用されます。たとえば、ユーザーインターフェイスにプログレスバーを表示します。

2.doInBackground(Params ...)は、onPreExecute()が実行を終了した直後にバックグラウンドスレッドで呼び出されます。このステップは、バックグラウンド計算に長時間かかることがあります。非同期タスクのパラメータは、このステップに渡されます。計算結果はこのステップで戻され、最後のステップに戻されます。このステップでは、publishProgress(Progress ...)を使用して、1つ以上の進行単位を公開することもできます。これらの値は、UIスレッドのonProgressUpdate(Progress ...)ステップで公開されます。

3.onProgressUpdate(Progress ...)、publishProgress(Progress ...)の呼び出し後にUIスレッドで呼び出されます。実行のタイミングは未定義です。このメソッドは、バックグラウンド計算がまだ実行されている間に、ユーザーインターフェイスに進捗状況を表示するために使用されます。たとえば、プログレスバーをアニメートしたり、テキストフィールドにログを表示したりすることができます。 4.onPostExecute(Result):バックグラウンド計算が終了した後にUIスレッドで呼び出されます。バックグラウンド計算の結果は、このステップにパラメータとして渡されます。 UI要素を更新するので、そうtextView.setText(strOrderNo);

+0

大丈夫ですよ。 – Karthi

+0

私のコードをアップデートするためにあなたの道を辿った@Gazi Rimon – Karthi

+0

ok ....... –

関連する問題