Android 异步任务。从Java服务器接收数据时出现问题

Android 异步任务。从Java服务器接收数据时出现问题,android,sockets,tcp,android-asynctask,Android,Sockets,Tcp,Android Asynctask,我想使用AsyncTask从Java服务器接收ArrayList(在本例中)。可以肯定的是,我从服务器上收到了一些东西,我正试图用Toast来显示它 代码如下: public class MainActivity extends Activity { private DataReceiving dRec; private DataTransfer dTrans; private EditText inputData; private Button sendParametersBtn; pri

我想使用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;
}
公共类MainActivity扩展活动{
专用数据接收dRec;
专用数据传输dTrans;
私有编辑文本输入数据;
专用按钮发送参数SBTN;
专用按钮开始计算BTN;
私有文本视图显示文本;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
inputData=(EditText)findViewById(R.id.InputText);
sendParametersBtn=(按钮)findViewById(R.id.button1);
startComputationBtn=(按钮)findViewById(R.id.button2);
displayText=(TextView)findViewById(R.id.textView1);
sendParametersBtn.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
dRec=新数据接收();
dRec.execute();
}
});
私有类数据接收扩展异步任务
{       
@凌驾
受保护的ArrayList doInBackground(无效…参数){
ArrayList b=新的ArrayList();
试一试{
b=接收();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}catch(classnotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}           
返回b;
}
受保护的void onPostExecute(ArrayList结果){
super.onPostExecute(结果);
Toast Toast=Toast.makeText(getApplicationContext(),result.toString(),Toast.LENGTH\u SHORT);
toast.show();
}
public ArrayList receive()抛出IOException,ClassNotFoundException
{
ServerSocket s=新的ServerSocket(8888);
套接字传入=s.accept();
ObjectInputStream ios=新的ObjectInputStream(incoming.getInputStream());
ArrayList b=(ArrayList)ios.readObject();
ios.close();
incoming.close();
s、 close();
返回b;
}
单击sendParametersBtn时,未发生任何事件。 另外,我可以成功地从安卓系统传输到服务器。所以这不是连接或权限问题


感谢您的帮助

您好,如果您从服务器获取一些东西,您必须调用web服务器url来获取数据。数据到达后,响应具有某种类型,如果它们是restful服务,则为JSON/XML;如果它们是SOAP服务,则为JSON/XML。因此,在响应返回后,获取这些内容并按照逻辑解析它们


查找HTTP get/post(用于ping到服务器并获取数据)和解析(JSON/XML)。

找到了!我将接收方法删除到了doInBackground中。

它不是运行HTTP的Web服务器。它只是本地网络中运行Java应用程序的另一台机器。我想使用套接字来完成所有数据传输。