我应该如何将变量传递给另一个类?

时间:2017-11-16 19:58:59

标签: java android

我已经声明了一个名为public static String parameterForURL的变量,我需要传递SendRequest类,这样总的URL会像 URL = http://www.eurekabd.com/shakil/home.php/?+shaki,123。 但是服务器正在接收/shakil/shakil.php/?[Ljava.lang.String;@ce6cdf7

public static  String parameterForURL = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
    parameterForURL ="shakil,123";

    doorOpenButtonActionClass.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            new SendRequest().execute();
            resultContainer="";
        }
    });
}

public class SendRequest extends AsyncTask<String, Void, String> {

    protected String doInBackground(String[] paramparameterForURL) {

        Log.v("Passed=",paramparameterForURL.toString());

        try{
            Log.v("Passed=",paramparameterForURL.toString());
            //String serv_url="http://www.eurekabd.com/shakil/home.php"+paramparameterForURL.toString();

            serv_url="http://192.168.0.109/shakil/shakil.php/?"+paramparameterForURL;
            //serv_url += paramparameterForURL;
            Log.e("Server Url",serv_url.toString());
            URL url = new URL(serv_url);
        }
    }
}   

enter image description here **如何制作我可以通过这个paramparameterForURL变量,以便我可以得到我想要的输出**

3 个答案:

答案 0 :(得分:3)

问题是你在做paramparameterForURL.toString()。由于paramparameterForURL是一个字符串数组,因此它的toString方法不会返回其内容,而是返回[Ljava.lang.String;@ce6cdf7之类的标识符。这是类名,@符号,然后是对象的哈希码。因此服务器将收到

/shakil/shakil.php / [Ljava.lang.String;?@ ce6cdf7

您想要做的是以下

public static  String parameterForURL = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    parameterForURL ="shakil,123";

    doorOpenButtonActionClass.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            new SendRequest().execute(parameterForURL);
            resultContainer="";
        }
    });
}

public class SendRequest extends AsyncTask<String, Void, String> {

    protected String doInBackground(String[] paramparameterForURL) {

        Log.v("Passed=",paramparameterForURL[0].toString());

        try{
            Log.v("Passed=",paramparameterForURL[0].toString());
            //String serv_url="http://www.eurekabd.com/shakil/home.php"+paramparameterForURL[0].toString();

            serv_url="http://192.168.0.109/shakil/shakil.php/?"+paramparameterForURL[0];
            //serv_url += paramparameterForURL;
            Log.e("Server Url",serv_url.toString());
            URL url = new URL(serv_url);

您将parameterForURL作为参数传递给AsyncTask,然后在异步任务中传递数组的第一项,因为您只指定了一个参数。

答案 1 :(得分:3)

首先,您根本不需要public static变量。相反,只需将值直接传递给AsyncTask的execute()方法:

new SendRequest().execute("shakil,123");

如果要将参数存储在变量中,请将其设为局部变量,而不是静态类变量:

String paramForURL = "shakil,123";
new SendRequest().execute(paramForURL);

现在要接收变量,你需要从数组参数中取出它:

 protected String doInBackground(String[] paramparameterForURL) {

    Log.v("Passed=",paramparameterForURL[0]);
    // ...
}

原始代码的问题在于您将数组转换为String。相反,您需要通过索引获取数组的元素,如上所示。

答案 2 :(得分:1)

你的类和构造函数中应该有一个属性来填充它

尝试将其放入您的班级:

private String _myParam;

public SendRequest ( string myParam ){
    _myParam = myParam;
    } 

// then continue with your try catch.

然后在您创建实例时:

new SendRequest("My awesome param").execute();

我希望这会有所帮助:)