我的java技能非常好,但我仍然无法理解这里发生的事情。 我正在编写一个Android应用程序,现在我正在编写一个使用Google Volley API的类,以便与Web服务器进行交互。 问题是我希望像这样调用类:
Server_interaction s_i = new Server_interaction(getApplication);
String text = s_i.post_request();
文本现在应该包含返回的post请求,在我的例子中是字符串“Hello from server”。相反,它原来是空的。发生这种情况是因为post_request方法似乎在执行post_request之前返回。
这是Server_interaction类:
public class Server_interaction
{
String server_url = "someipadress/greeting.php"; //this address is correct, but I want to hide it for you guys :)
String response_string;
Context myContext;
RequestQueue requestQueue;
public static final String TAG = Server_interaction.class.getSimpleName();
/* Here we add a constructor that takes in context. We need a context for volley requestqueue, and this is an elegant way*/
public Server_interaction(Context context)
{
myContext = context;
requestQueue = Volley.newRequestQueue(myContext);
}
public String post_request()
{
StringRequest stringRequest = new StringRequest(Request.Method.POST, server_url,
new Response.Listener<String>()
{
@Override
public void onResponse(String response)
{
response_string = response;
requestQueue.stop();
Log.i(TAG, "the response is: "+ response_string);
}
}
, new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error)
{
response_string = "Something went wrong";
//error.printstacktrace()
requestQueue.stop();
}
}
); //stringrequest parameter end
//add request to requestqueue
requestQueue.add(stringRequest);
Log.i(TAG, "the response again:: "+ response_string);
return response_string;
}
}
执行时,logcat会显示:
01-22 19:00:44.878 2954-2954/com.example.koenraad.Exigentia I/Server_interaction: the response again:: null
01-22 19:00:44.926 2954-2954/com.example.koenraad.Exigentia I/Server_interaction: the response is: hello from server
所以这意味着返回时字符串为null,然后设置它。怎么解决这个问题?
提前致谢!
答案 0 :(得分:2)
您的代码是异步的。
方法StringRequest
中创建的post_request()
对象将在方法返回之后由框架使用。