#android
#Android
Вопрос:
Мне нужно использовать соединение с tcp-сокетом для получения данных из bluebox, если я введу комментарий, такой как «getcolor», bluebox отправит мне информацию типа «красный, синий». В этом случае bluebox является сервером, и мне не нужно программировать на нем, но у меня проблема с отображением информации в EditText.
public class sender {
public static void main(String[] args)throws IOException{
Socket socket = new Socket("192.168.1.176",14111);
OutputStream out = socket.getOutputStream();
BufferedReader msg = new BufferedReader(new InputStreamReader(System.in));
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter ou = new PrintWriter(new BufferedWriter(new OutputStreamWriter(out)),true);
String buffer = new String("");
String ms = "";
while(true)
{
while(in.ready())
buffer = in.readLine() "n";
String[] line = buffer.split("n");
while(msg.ready())
ms = msg.readLine();
if(ms.equals("exit"))
{
break;
}
if(!ms.equals(""))
{
ou.println(ms);
ou.flush();
ms = "";
}
if(!buffer.equals(""))
{
System.out.print(buffer);
buffer = "";
}
}
in.close();
out.close();
socket.close();
}
}
этот Java-код работает, но в приведенном ниже коде Android происходит сбой:
public class BlueBoxApp extends Activity {
/** Called when the activity is first created. */
Context appInstance = this;
private EditText info;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
info = (EditText)findViewById(R.id.EditText01);
try{
InetAddress serverAddr = InetAddress.getByName("192.168.1.176");//TCP服务器IP地址
Log.d("TCP", "server,receiving...");
Socket socket = new Socket(serverAddr,14111);
try {
OutputStream out = socket.getOutputStream();
BufferedReader msg = new BufferedReader(new InputStreamReader(System.in));
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter ou = new PrintWriter(new BufferedWriter(new OutputStreamWriter(out)),true);
String buffer = new String("");
String ms = "getsensorno";
Log.d("TCP", "sending:'" ms "'");
while(true)
{
while(in.ready())
buffer = in.readLine() "n";
while(msg.ready())
ms = msg.readLine();
if(ms.equals("exit"))
{
break;
}
if(!ms.equals(""))
{
ou.println(ms);
ou.flush();
ms = "";
}
if(!buffer.equals(""))
{
info.setText(buffer);
buffer = "";
}
}
} catch (Exception e) {
Log.e("TCP", "error",e);
}finally{
socket.close();
}
}catch(Exception e){
Log.e("TCP", "error",e);
}
}
}
в чем проблема и как настроить поток для нее? Спасибо!
Комментарии:
1. Что является исключением? Может быть, он не может подключиться к Интернету из эмулятора?
2. В чем именно проблема?
Ответ №1:
Проблема, как вы указали, заключается в том, что вы выполняете сетевую часть в основном потоке.
Установить новый поток несложно, рассмотрите возможность использования AsyncTask. Пожалуйста, прочитайте документацию (которая очень хороша), прежде чем переходить к ее реализации, это значительно упростит ИМХО.
Кроме того, убедитесь, что у вас есть разрешение на доступ в Интернет в вашем AndroidManifest.xml