方法在完成执行之前返回?

时间:2017-01-22 18:17:00

标签: java android server return android-volley

我的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,然后设置它。怎么解决这个问题?

提前致谢!

1 个答案:

答案 0 :(得分:2)

您的代码是异步的。

方法StringRequest中创建的post_request()对象将在方法返回之后由框架使用。