我已经声明了一个名为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);
}
}
}
答案 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();
我希望这会有所帮助:)