0
TimerTask를 사용하여 특정 간격으로 Wi-Fi 검사 결과를 가져옵니다. 스캔 결과를 서버에 보내고 싶습니다. 결과를 보내기 위해 AsyncTask를 사용했습니다. TimerTask 내부에서 AsyncTask를 호출하면 응용 프로그램이 충돌합니다. 아무도 왜 이것이 일어나고 있는지 말해 줄 수 있습니까? 또한 내 코드에서 결과를 서버로 보내는 가장 좋은 방법은 무엇입니까? 이것은 TimerTask를의 코드timertask가 완료되면 Asynctask를 사용하여 서버와 통신하기
public class ServerComm extends AsyncTask<String, Void, String>{
int port=9999;
String IP="192.168.2.100";
BufferedReader input;
@Override
protected String doInBackground(String... scanRes) {
// TODO Auto-generated method stub
Socket socket;
String loc="";
FileWriter writer;
File sock=new File(Environment.getExternalStorageDirectory()+"/network.txt");
try {
writer = new FileWriter(sock, true);
writer.append("in async task.\n");
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
InetAddress serverAddr = InetAddress.getByName(IP);
socket = new Socket(serverAddr, port);// socket is created
input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
Log.d("ser","socket");
// now send
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
out.println(scanRes);
// get the reply
loc = input.readLine();
//close
socket.close();
return loc;
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return loc;
}
@Override
protected void onPostExecute(String result) {
// draw the new location on the map
}
: 여기
내 코드입니다public void Locate()
{
if(isScanning)// if a previous scan is running cancel it
{
timer.cancel();
}
else
{
timer.schedule(new TimerTask() { // start new scanner
@Override
public void run() {
// TODO Auto-generated method stub
if(counter==numOfScans)
{
try {
writer = new FileWriter(file, true);
writer.append(RSS+" \n");
writer.append("Finished Collecting RSSIs.\n");
writer.close();
new ServerComm().execute(RSS);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
timer.cancel();
}
else // not finished
{
isScanning=true;
if(result!=null)
{
if(result.size()!=0)
{
for(int i=0;i< result.size();i++)
{
RSS=RSS+result.get(i).BSSID+" "+result.get(i).level+" ";
}//end for
counter++;
} // end of if
}//end of else
}
}
}, 0,Interval);
}
//get location
}
응용 프로그램이 어떻게 충돌합니까? logcat에서 예외가 있습니까? –
@ NicolasDefranoux 응용 프로그램에서 Wi-Fi를 사용하고 있기 때문에 전화로 직접 실행합니다. 따라서 어떤 logcat 메시지도 가지고 있지 않습니다. – Alaa
왜 FileWriter를 자신의 로거로 사용합니까? asynctask에서 얼마나 멀리 나옵니까? – greenapps