简体   繁体   English

我无法在类(Android)中设置TextView的setText

[英]I'm Unable to setText of a TextView in a class (Android)

I'm using SOAP, In AsyncTask classs I'm trtying to set text of driverIDText, shipmentIDText, freightShipment textviews but it's saying unable to resolve setText() 我正在使用SOAP,在AsyncTask类中,我正在尝试设置driverIDText,shipmentIDText,freightShipment textviews的文本,但它说无法解析setText()

Here is my code: 这是我的代码:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show_up);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);


         TextView driverIDText = (TextView) findViewById(R.id.text_DriverID);
         TextView shipmentIDText = (TextView) findViewById(R.id.text_ShipmentID);
         TextView freightShipment = (TextView) findViewById(R.id.text_FreightShipment);

new RetrieveFeedTask(driverIDText.getText.toString(),
shipmentIDText.getText().toString(),
freightShipment.getText().toString()
).execute();

    }

    class RetrieveFeedTask extends AsyncTask<String, String, Void> {

        private String driverIDText, shipmentIDText, freightShipment;

        RetrieveFeedTask(String driverIDText, String shipmentIDText, String freightShipment) {
            this.driverIDText = driverIDText;
            this.shipmentIDText = shipmentIDText;
            this.freightShipment = freightShipment;
        }


        protected Void doInBackground(String... urls) {


            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

            request.addProperty("DriverID", driverIDText);
            request.addProperty("ShipmentID", shipmentIDText);
            request.addProperty("FreightShipment", freightShipment);

            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

            envelope.setOutputSoapObject(request);
            envelope.dotNet = true;

            try {
                HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

                androidHttpTransport.call(SOAP_ACTION, envelope);

                SoapObject result = (SoapObject) envelope.bodyIn;
                if (result != null) {

                    // HERE IS PROBLEM IN SETTEXT()
                    driverIDText.setText(result.getProperty(0).toString());


                } else {
                    Toast.makeText(getApplicationContext(), "Login Failed!", Toast.LENGTH_LONG).show();
                }

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

            }
            return null;
        }

    }

Inside AsyncTask you declared driverIDText as String not TextView, So Create one more param for TextView and send driverIDText(TextView) from Oncreate and set the data in textView in onPostExecute. 在AsyncTask中,您将driverIDText声明为String而不是TextView,因此为TextView创建一个参数,然后从Oncreate发送driverIDText(TextView)并在onPostExecute中的textView中设置数据。

Ex: 例如:

    class RetrieveFeedTask extends AsyncTask<String, String, String> {

        private String driverIDText, shipmentIDText, freightShipment;

        private TextView driverIDTextTv;

        RetrieveFeedTask(String driverIDText, String shipmentIDText, String freightShipment, TextView textView) {
            this.driverIDText = driverIDText;
            this.shipmentIDText = shipmentIDText;
            this.freightShipment = freightShipment;
            driverIDTextTv = textView;
        }

        @Override
        protected void onPostExecute(String text) {
            super.onPostExecute(text);

            driverIDTextTv.setText(text);
        }

        protected String doInBackground(String... urls) {


            String localDriverId = "";

            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

            request.addProperty("DriverID", driverIDText);
            request.addProperty("ShipmentID", shipmentIDText);
            request.addProperty("FreightShipment", freightShipment);

            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

            envelope.setOutputSoapObject(request);
            envelope.dotNet = true;

            try {
                HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

                androidHttpTransport.call(SOAP_ACTION, envelope);

                SoapObject result = (SoapObject) envelope.bodyIn;
                if (result != null) {

                    // HERE IS PROBLEM IN SETTEXT()
//                    driverIDText.setText(result.getProperty(0).toString());

                    localDriverId = result.getProperty(0).toString();


                } else {
                    Toast.makeText(getApplicationContext(), "Login Failed!", Toast.LENGTH_LONG).show();
                }

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

            }
            return localDriverId;
        }

    }

and you can call AsyncTask like this, 您可以像这样调用AsyncTask,

new RetrieveFeedTask(driverIDText.getText.toString(),
                shipmentIDText.getText().toString(),
                freightShipment.getText().toString(), driverIDText
        ).execute();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM