如何从服务器接收消息时在Android客户端上启动新活动

时间:2014-06-05 09:17:23

标签: java android client-server

我在android中启动新活动时遇到问题。我在这里看了很多其他问题,但我没有找到答案。这就是问题所在: 四课: 1. WelcomeActivity; 2.主要活动; 3. PopUpActivity; 4.客户;

在开始启动WelcomeActivity时,您键入所有需要的凭据以连接到服务器,单击该按钮后,字符串将发送到服务器。如果一切正常,服务器发送验证字符串。如果收到OK,则启动MainActivity。用户在MainActivity中键入不同的内容,按下另一个按钮,该按钮将另一个字符串发送到服务器。服务器处理它(字符串)并发回一个响应,也是一个字符串。这就是问题所在。当服务器将最后一个字符串发送到客户端时,我想启动PopUpActivity,这将在TextView中显示这个aprticualr字符串。

我的代码: 客户部分(如果是其他的话):

   public void run() throws Exception {
        Socket client = new Socket(ip, port);
    in = new BufferedReader(new InputStreamReader(client.getInputStream()));
    out = new PrintWriter(client.getOutputStream(), true);
    out.println(welcomeActivity.getCredentials());
    while (true) {
        final String line = in.readLine();
        if (line.equals("#GO#")) {
            System.out.println("#GO#");
            mainActivityIntent = new Intent(welcomeActivity,
                    MainActivity.class);
            welcomeActivity.startActivity(mainActivityIntent);
        } else if (line.equals("#CLOSE#")) {
            client.close();
            break;
        } else if (line.startsWith("#RESULTS")) {           
            Intent i = new Intent(MainActivity.getContext(), PopUpActivity.class);
            i.putExtra(line, line);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            MainActivity.getContext().startActivity(i);             
        }
    }
}

WelcomeActivity:

public void onClick(View v) {
    ip = ipText.getText().toString();
    port = Integer.parseInt(portText.getText().toString());
    login = loginText.getText().toString();
    password = passwordText.getText().toString();
    credentials = login + "#" + password + "#" + brand + "#" + device + "#"
            + hardware + "#" + manufacturer + "#" + product;
    client = new Client(ip, port, this);
    new Handler().start();
}

private class Handler extends Thread {
    public void run() {
        try {
            client.run();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

PopUpActivity:

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pop_up);
    closeButton = (Button) findViewById(R.id.closeButton);
    testOutcome = (TextView) findViewById(R.id.textArea);
    closeButton.setOnClickListener(this);

    //
    Bundle extras = getIntent().getExtras();
    if (extras == null) {
        return;
    }
    String value = extras.getString(Intent.EXTRA_TEXT);
    if (value != null) {
        testOutcome.setText(value);
    }
}

PopUpActivity已启动,但未显示文字。

在此之前,我尝试在MainActivity中使用Context:

final static Context context;
 ....
public void onCreate() {
context = getBaseContext();
// or context = getApplicationContext();
....
 }
 ...
 public static Context getContext() {
  return context;
 }

从克林特试图打电话:

 MainActivity.getContext().getTextView().setText(line);

在开始时我绑定了一个AlertDialog,但它也很糟糕,NullPointerException

1 个答案:

答案 0 :(得分:3)

问题在于你的意图,所以你可以写     您的MainActivity中的i.putExtra("line",line); 你可以通过它来检索它     您的PopUp活动中的Intent intent = getIntent(); intent.getStringExtra("line");