0

私はそれを消費することによってWebサービスからのint配列にいくつかの値を収集しようとしています。ここでは、消費のためにSOAPメソッドを使用しています。

int 配列の値を収集しようとすると、エミュレーターを実行できません。

このエラーを克服するにはどうすればよいですか? 参照用に私のソースを見つけてください。

Main_WB.java

 public class Main_WB extends Activity 
 {
EditText edt1,edt2;
TextView txt_1;
Button btn;

 @Override
 public void onCreate(Bundle savedInstanceState) 
 {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    edt1 = (EditText)findViewById(R.id.editText1);
    edt2 = (EditText)findViewById(R.id.editText2);
    btn = (Button)findViewById(R.id.button1);

    btn.setOnClickListener(new View.OnClickListener()
    {
    public void onClick(View v) 
    {
        getTMSChart(edt1.getText().toString(),edt2.getText().toString());
    }     
    });
  }

 private void getTMSChart(String FromDate,String ToDate)
 {
     txt_1 = (TextView)findViewById(R.id.textView1);

     System.setProperty("http.keepAlive", "false");        
     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);        

     envelope.dotNet = true;

     String NAMESPACE = "http://tempuri.org/";
     String URL = "http://54.251.60.177/TMSOrdersService/TMSDetails.asmx";
     String METHOD = "GetTMSChart";

     SoapObject request = new SoapObject(NAMESPACE, METHOD);        
     request.addProperty("FromDate", FromDate);               
     request.addProperty("ToDate", ToDate);

     envelope.setOutputSoapObject(request);
     HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

     try 
     {
         androidHttpTransport.call(NAMESPACE + METHOD, envelope);

         SoapObject result = (SoapObject) envelope.bodyIn;

         SoapObject root =  (SoapObject) ((SoapObject)(result).getProperty(0)).getProperty("NewDataSet");

         int tablesCount = root.getPropertyCount();


      for (int i = 0; i < tablesCount; i++)
      {
         SoapObject table = (SoapObject) root.getProperty(i);
         int propertyCount = table.getPropertyCount();

      for (int j = 0; j < propertyCount; j++)
      {           

    //  String orderNo =  table.getPropertyAsString("Order_No");
    //  String freight =  table.getPropertyAsString("Freight_Rate");
    //  String percent =  table.getPropertyAsString("Margin_Percent");


       int orderNo = Integer.parseInt(table.getPropertyAsString("Order_No"));
       int freightRate = Integer.parseInt(table.getPropertyAsString("Freight_Rate"));
       int marginPercent = Integer.parseInt(table.getPropertyAsString("Margin_Percent"));

       int[] ord = new int[orderNo];
       int[] frei = new int[freightRate];
       int[] margin = new int[marginPercent];


     // whatever you do with these values

       txt_1.setText(ord);
       txt_1.setText(frei);
       txt_1.setText(margin);
          }                   
       }
    }   
    catch (Exception e) 
    {
    }   
    }    }
4

2 に答える 2

1

これはコンパイル エラーであり、エラーは一目瞭然です。

The method setText(CharSequence) in the type TextView is not applicable for the arguments (int[])

これは、メソッドの引数はsetText()CharSequence 型でなければならないが、CharSequence ではない type の引数で呼び出していることを意味しますint[]

int[]配列を String に変換し、 String が CharSequence を実装するため、結果の String を に渡しsetText()ます。例えば:

txt_1.setText(Arrays.toString(ord));

さらに、同じテキスト フィールドに対して 3 つの異なる引数を指定して setText() を呼び出す意味がわかりません。

于 2012-09-25T12:15:11.777 に答える
0
   int orderNo = Integer.parseInt(table.getPropertyAsString("Order_No"));
   int freightRate = Integer.parseInt(table.getPropertyAsString("Freight_Rate"));
   int marginPercent = Integer.parseInt(table.getPropertyAsString("Margin_Percent"));

   int[] ord = new int[orderNo];
   int[] frei = new int[freightRate];
   int[] margin = new int[marginPercent];


 // whatever you do with these values

   txt_1.setText(ord);
   txt_1.setText(frei);
   txt_1.setText(margin);

ここで何をしようとしていますか?その (役に立たない) コードを見ると、基本的なプログラミングの知識が不足しているように見えます。おそらく、さらにチュートリアルを読む必要があります。

つまり、あなたが実際にそこで何をしているのかを指摘しています。

    int orderNo = Integer.parseInt(table.getPropertyAsString("Order_No"));

ここでは、プロパティ「Order_No」を文字列値として要求し、それを int に変換します。ここまでは順調ですね。

    int[] ord = new int[orderNo];

ここでは、要素数が に等しい int-array を作成しますorderNo。したがって、orderNo が 12345 の場合、12345 要素の int-array を作成します。それはあなたが意図したものではないと思います。

   txt_1.setText(ord);

ここでは、その巨大な (初期化されていない) int 配列をパラメータとして txt_1 の setText メソッドに渡します。そのメソッドは明らかに int-array ではなく文字列値を必要とします。

それで、あなたは何をしようとしていますか?

編集:

int-array の作成に関する質問に答えるには:

int[] ord = new int[propertyCount];
int[] frei = new int[propertyCount];
int[] margin = new int[propertyCount];

for (int j = 0; j < propertyCount; j++)
{           
    int orderNo = Integer.parseInt(table.getPropertyAsString("Order_No"));
    int freightRate = Integer.parseInt(table.getPropertyAsString("Freight_Rate"));
    int marginPercent = Integer.parseInt(table.getPropertyAsString("Margin_Percent"));

    ord[j] = orderNo;
    frei[j] = freightRate;
    margin[j] = marginPercent;

}                   

// process the arrays;

テーブルごとに 1 つの配列が必要であると想定しているため、内側のループの外側で配列を作成し、ループ内でそれらを埋めます。

その後、これらの配列を処理できます。外側のループのすべてのテーブルに対して配列が再作成されることに注意してください。

それが役立つことを願っています。

于 2012-09-25T12:13:29.060 に答える