您好我正在开发一个在远程服务器上执行数据库查询的应用程序。到目前为止,我已经成功地与服务器端的PHP脚本进行了交互,我的代码正在发送字符串值而没有任何问题,但我不知道如何检查我是否收回了值i&i #39; m通过我的PHP脚本发回,因为我的OnPostExecute函数没有响应。 请帮助。
以下是遇到问题的代码:
public void submit_data(View V){
try{
new DoSocketProgramming().execute("10.0.2.2");
}
catch(Exception e){
Toast.makeText(getApplicationContext(), "problem here", Toast.LENGTH_SHORT).show();
}
Toast.makeText(getApplicationContext(), "created till here", Toast.LENGTH_SHORT).show();
}
public class DoSocketProgramming extends AsyncTask<String, Void, String>
{
String sendsentence=" this message is sent\n";
String recvsentence=null;
protected void onPreExecute()
{
Toast.makeText(getApplicationContext(), "this is preExecute", Toast.LENGTH_LONG).show();
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
try{
Socket con=new Socket(addr,1678);
DataInputStream dis=new DataInputStream(con.getInputStream());
DataOutputStream dos=new DataOutputStream(con.getOutputStream());
dos.writeUTF(sendsentence);
recvsentence=dis.readUTF();
}catch(Exception e){
e.printStackTrace();
}
return recvsentence;
}
protected void onPostExecute(String result) {
try{
Toast.makeText(getApplicationContext(), "this is post execute"+ recvsentence, Toast.LENGTH_LONG).show();
}catch(Exception e){
e.printStackTrace();
}
}
}
答案 0 :(得分:0)
实际上可能是。问题是您使用getApplicationContext()
作为Context
,这几乎总是错误的,除非您确切知道自己在做什么,否则不应该使用它。<\ n / p>
创建AsyncTask
时,构造函数会收到调用它的Context
Activity
,您应该将此Context
存储在AsyncTask
类中,在onPostExecute()
方法中使用它。
这是一个例子:
public class MyAsyncTask extends AsyncTask {
Context context;
private MyAsyncTask(Context context) { this.context = context; }
@Override
protected void onPostExecute(...) {
super.onPostExecute(result);
Toast.makeText(context, "this is post execute"+ recvsentence, Toast.LENGTH_LONG).show();
}
}