我设计了一个应用程序,可以从服务器接收特定年份和特定人员的数据 在应用程序中,我使用了2个按钮来增加和减少年份的值。数据可在特定时间段内使用,并且该时间因人而异。
因此,当有人递增年份并且该年份的数据不可用时,服务器将返回0. 收到0后应用应禁用 增量按钮并显示上一年的数据。
以下是该应用的代码。我使用套接字编程与服务器通信。 有2个java文件。一个是显示数据的活动,另一个是asynctask,用于从服务器提取数据。
public class MainActivity2 extends ActionBarActivity {
TextView[] t = new TextView[5];
TextView t1;
String empno;
int year;
ImageButton i1, i2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_activity2);
t[0] = (TextView) findViewById(R.id.textView6);
t[1] = (TextView) findViewById(R.id.textView7);
t[2] = (TextView) findViewById(R.id.textView8);
t[3] = (TextView) findViewById(R.id.textView9);
t[4] = (TextView) findViewById(R.id.textView10);
t1 = (TextView) findViewById(R.id.textView11);
i1 = (ImageButton) findViewById(R.id.imageButton);
i2 = (ImageButton) findViewById(R.id.imageButton2);
Intent i = getIntent();
empno = i.getStringExtra("emp_no");
getValues();
i1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
year = year + 1;
getValues();
}
});
i2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
year = year - 1;
getValues();
}
});
}
private void getValues() {
t1.setText(String.valueOf(year));
Connect c = new Connect(this, empno, year, t);
c.execute();
}
}
第二个java类是Connect,它实现了套接字编程。
public class Connect extends AsyncTask < Void, Void, Void > {
TextView[] t;
String a, r, en, y;
Context c;
TextView t1;
int year;
public Connect(Context c, String en, int year, TextView[] t) {
this.c = c;
this.en = en;
this.year = year;
this.t = t;
}
@Override
protected Void doInBackground(Void...arg0) {
a = en + ":" + String.valueOf(year);
try {
Socket client = new Socket("10.1.13.74", 7777);
OutputStream outToServer = client.getOutputStream();
DataOutputStream out = new DataOutputStream(outToServer);
out.writeUTF(a);
InputStream inFromServer = client.getInputStream();
DataInputStream in = new DataInputStream(inFromServer);
r = in .readUTF();
client.close();
} catch (IOException e) {
r = "0";
}
return null;
}
@Override
protected void onPostExecute(Void result) {
if (r.equals("0")) {
for (int i = 0; i < 5; i++) {
t[i].setText("");
}
} else {
String[] buffer = null;
buffer = r.split(":");
for (int i = 0; i < 5; i++) {
t[i].setText(buffer[i + 1]);
}
}
}
}