0

我正在尝试在 int 数组中收集一些值,这些值是通过使用它来自 Web 服务的。这里我使用 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 类型,但是您使用类型的参数调用它int[],而不是 CharSequence。

int[]数组转换为字符串,并在 String 实现 CharSequence 时,将生成的字符串传递给setText(). 例如:

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

此外,我真的看不出在同一个文本字段上使用三个不同的参数调用 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 数组orderNo。因此,如果您的 orderNo 是 12345,您将创建一个包含 12345 个元素的 int 数组。我不认为那是你的本意。

   txt_1.setText(ord);

在这里,您将那个巨大的(未初始化的)int 数组作为参数传递给 txt_1 的 setText 方法。该方法显然需要一个字符串值而不是一个 int 数组。

那你想做什么?

编辑:

要回答有关创建 int 数组的问题:

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;

我假设您希望每个表有一个数组,因此我在内部循环之外创建数组并将它们填充到循环中。

之后您可以处理这些数组。请注意,将为外部循环中的每个表重新创建数组。

希望有帮助。

于 2012-09-25T12:13:29.060 回答