我想使用AsyncTask从Java服务器接收ArrayList(在本例中)。可以肯定的是,我从服务器收到的东西我试图用Toast显示它。
守则如下:
public class MainActivity extends Activity {
private DataReceiving dRec;
private DataTransfer dTrans;
private EditText inputData;
private Button sendParametersBtn;
private Button startComputationBtn;
private TextView displayText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
inputData=(EditText) findViewById(R.id.InputText);
sendParametersBtn=(Button) findViewById(R.id.button1);
startComputationBtn=(Button) findViewById(R.id.button2);
displayText=(TextView) findViewById(R.id.textView1);
sendParametersBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dRec = new DataReceiving();
dRec.execute();
}
});
private class DataReceiving extends AsyncTask<Void, Void, ArrayList>
{
@Override
protected ArrayList doInBackground(Void... params) {
ArrayList b = new ArrayList();
try {
b = receive();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return b;
}
protected void onPostExecute(ArrayList result) {
super.onPostExecute(result);
Toast toast=Toast.makeText(getApplicationContext(), result.toString(), Toast.LENGTH_SHORT);
toast.show();
}
public ArrayList receive () throws IOException, ClassNotFoundException
{
ServerSocket s= new ServerSocket(8888);
Socket incoming =s.accept();
ObjectInputStream ios = new ObjectInputStream(incoming.getInputStream());
ArrayList b = (ArrayList) ios.readObject();
ios.close();
incoming.close();
s.close();
return b;
}
点击sendParametersBtn时没有发生任何事情。 附:我可以成功地从Android传输到服务器。所以它不是连接或权限问题。
感谢您的帮助
答案 0 :(得分:0)
嗨如果您从服务器获取某些内容,则必须调用Web服务器URL来获取数据。在数据到达后,响应有一些类型,如果它们是宁静的服务,它们将是JSON / XML,如果它们是信封的SOAP服务。所以在响应返回之后得到它并按逻辑解析它们。
查找HTTP get / post(用于ping到服务器并获取数据)和解析(JSON / XML)。
答案 1 :(得分:0)
想通了!我将receive方法删除到doInBackground中。