敬酒没有在asynctask中显示

时间:2017-06-14 15:41:00

标签: java android android-asynctask server

我正在尝试从服务器获取消息以显示在吐司中,但它不会出现。客户端从服务器接收消息没有任何错误。我尝试在onpost中打开UI线程但它不起作用

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    new test().execute();

}
public class test extends AsyncTask<String,String,String>{


    @Override
    protected String doInBackground(String... params) {

        try
        {
            socket = new Socket("ip", port);
            OutputStream outToServer = socket.getOutputStream();
            DataOutputStream out = new DataOutputStream(outToServer);
            Log.i(debugString, "Connected_reg!");
            out.writeUTF("3");


            InputStream inFromServer = socket.getInputStream();
            DataInputStream in = new DataInputStream(inFromServer);
            Log.i(debugString, in.readUTF());
            string= in.readUTF();

        }
        catch (Exception e) {
            Log.e(debugString, e.getMessage());
        }


        return null;
    }


    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected void onPostExecute(String s) {

       //super.onPostExecute(s);

                Context context = getApplicationContext();
                CharSequence text = string;
                int duration = Toast.LENGTH_SHORT;
                Toast toast = Toast.makeText(context, text, duration);
                toast.show();
    }


}

2 个答案:

答案 0 :(得分:0)

可能与上下文有关。

过去我遇到过一些问题,因为getApplicationContext对某些事情不起作用,虽然不记得是什么形式。

在调用异步任务的活动中,不要使用getApplicationContext,而是在构造函数调用中放置this。例如,假设您要从MainActivity转到,请将行new test().execute();更改为新test(MainActivity.this).execute();

然后在async类中创建构造函数为

public test(Context context)并将全局类变量设置为context的值,然后在toast.makeText中使用它,而不是从getApplicationContext返回的值。

另外看看logcat,看看是否有任何错误或异常被抛出,也可能值得在onpostexecute方法中添加一个日志行,只是为了仔细检查你是否定义了那里。

答案 1 :(得分:0)

test 类中创建一个构造函数,该构造函数接收上下文并在Toast.makeText中使用该上下文。将主机活动上下文传递给该构造函数。

getApplicationContext()是一个Context类方法,AsyncTask不是该类固有的。我假设您在一个可以调用该方法的范围内,但该范围上下文在您调用Toast.makeText方法的范围内无效。