的AsyncTask。从Java Server接收的问题

时间:2013-06-14 00:46:12

标签: 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;
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传输到服务器。所以它不是连接或权限问题。

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

嗨如果您从服务器获取某些内容,则必须调用Web服务器URL来获取数据。在数据到达后,响应有一些类型,如果它们是宁静的服务,它们将是JSON / XML,如果它们是信封的SOAP服务。所以在响应返回之后得到它并按逻辑解析它们。

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

答案 1 :(得分:0)

想通了!我将receive方法删除到doInBackground中。