您好亲爱的程序员,我需要您的帮助.
我做了一个非常非常简单的Java套接字(客户端 - 服务器)项目,效果很好.但是当我使用那个客户端代码来制作它的android时,它不起作用,但我只为android制作客户端代码,服务器代码再次使用Java(也许我应该在android中制作服务器代码?)
服务器(Java)
public class DailyAdviceServer{ public void go() { try { ServerSocket serverSock = new ServerSocket(16242, 50); while (true) { Socket sock = serverSock.accept(); PrintWriter writer = new PrintWriter(sock.getOutputStream()); String advice = getAdvice(); writer.println(advice); writer.close(); System.out.println("smth"); } } catch (IOException ex) { ex.printStackTrace(); } } public static void main(String[] args) { DailyAdviceServer server = new DailyAdviceServer(); server.go(); }
}
客户端(在Android中)
public class MainActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try { TextView tv = (TextView) findViewById(R.id.tv); Socket s = new Socket("127.0.0.1", 4242); InputStreamReader streamReader = new InputStreamReader(s.getInputStream()); BufferedReader reader = new BufferedReader(streamReader); String advice = reader.readLine(); tv.setText("Today you should: " + advice); reader.close(); } catch (IOException ex) { ex.printStackTrace(); } }
小智.. 10
你不应该在"onCreat()"中连接网络,并且可以使用"AsyncTask"
String advice = ""; class MySyncTask extends AsyncTask{ @Override protected String doInBackground(Integer... params) { try{ Socket s = new Socket("127.0.0.1", 4242); InputStreamReader streamReader = new InputStreamReader(s.getInputStream()); BufferedReader reader = new BufferedReader(streamReader); advice = reader.readLine(); reader.close(); }catch(Exception ex) ex.printStackTrace(); } return advice; } protected void onPostExecute(String result) { tv.setText("Today you should: " + advice); } protected void onPreExecute() { log.i("start"); } }
}
并在onCreate中添加此代码:
MySyncTask asyncTask=new MySyncTask (tv,pbar); asyncTask.execute(1000);
我的代码可能有一些错误,你应该检查;
你可以在谷歌搜索"AsyncTask",并为它提供了许多信息.它可能对你有用.
需要很多时间做的工作不能放在UI线程,桅杆放在后台.
我很抱歉我的英语不好
对不起,我再次修改了我的代码
你不应该在"onCreat()"中连接网络,并且可以使用"AsyncTask"
String advice = ""; class MySyncTask extends AsyncTask<Integer, Integer, String>{ @Override protected String doInBackground(Integer... params) { try{ Socket s = new Socket("127.0.0.1", 4242); InputStreamReader streamReader = new InputStreamReader(s.getInputStream()); BufferedReader reader = new BufferedReader(streamReader); advice = reader.readLine(); reader.close(); }catch(Exception ex) ex.printStackTrace(); } return advice; } protected void onPostExecute(String result) { tv.setText("Today you should: " + advice); } protected void onPreExecute() { log.i("start"); } }
}
并在onCreate中添加此代码:
MySyncTask asyncTask=new MySyncTask (tv,pbar); asyncTask.execute(1000);
我的代码可能有一些错误,你应该检查;
你可以在谷歌搜索"AsyncTask",并为它提供了许多信息.它可能对你有用.
需要很多时间做的工作不能放在UI线程,桅杆放在后台.
我很抱歉我的英语不好
对不起,我再次修改了我的代码