私はこの種の開発に少し新しいです。簡単に言うと、私はクラウドに文字列を送信するandroidアプリに取り組んでいます(私はAmazonに仮想サーバーマシンを持っています)、すべてがうまく機能し、電話からサーバーマシンに文字列を送信します。送信して動作します!。しかし、サーバーからAndroidアプリに応答を返すとき(Android携帯で実行しています)、何も取得されません(応答は文字列+別の文字列を連結する必要があります)、それは簡単ですよね?しかし、残念ながら私はそれを受け取ることができません。サーバー側をテストしましたが、正常に動作しています(AmazonEC2)。私がしていることを私ができるかどうかは本当にわかりません。
AsyncTaskクラスからdoInBackground()メソッドのクラウドにデータを送信するソケットを使用して文字列を送信する送信コードを作成します。同じメソッドdoInBackgroundで、ServerSocketを使用してクラウドから応答を受信することにより、応答を受信するコードを実行します。それは可能ですか、それとも別のスレッドなどが必要ですか?
これが私のコードです:
`import android.os.Bundle;
import android.app.Activity;
import android.widget.TextView;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.*;
import android.os.AsyncTask;
import android.view.View;
public class ReadWebpageAsyncTask extends Activity {
private TextView textView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textView = (TextView) findViewById(R.id.TextView01);
}
private class DownloadWebPageTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls)
{
String response = "";
//Transmission
try
{
Socket socket = new Socket("MyAmazonServerIp", 5678);
DataOutputStream salida = new DataOutputStream (socket.getOutputStream());
salida.writeUTF("Llego Perfectamente");
socket.close();
salida.close();
}
catch (Exception e)
{
e.printStackTrace();
}
//Final ends
// Reception
boolean ak=true;
try
{
ServerSocket ServerSock = new ServerSocket(7896);
while(ak)
{
Socket cl=ServerSock.accept();
InetAddress ipC = cl.getInetAddress();
DataInputStream en= new DataInputStream(cl.getInputStream());
response= en.readUTF();
//response= response.toString();
ak=false;
}
}
catch(Exception exp)
{
exp.printStackTrace();
}
// Reception ends
return response;
} //doInBackground ends
@Override
protected void onPostExecute(String result)
{
textView.setText(result);
}
}
public void readWebpage(View view) {
DownloadWebPageTask task = new DownloadWebPageTask();
task.execute(new String[] { "????" });
}
}`
私はこれに何日も取り組んできましたが、それを解決することができなかったので、私は本当にどんな助けにも感謝します。ありがとう、