Ну, на самом деле он работает очень хорошо на моем симуляторе студии Android, но когда я пытаюсь запустить его на своем телефоне, он просто падает. Я просто хочу отправить номер на сервер и получить ответ с данными, которые мне нужны для этого номера. так что это мой код, который это сделать:Мое приложение падает, когда я пытаюсь отправить запрос на сервер
thread = new Thread() {
@Override
public void run() {
//server stuff
try {
//Connecting
if(!userClass.equals("")) {
Log.i(debugString, "Attempting to connect to server");
socket = new Socket(hostname, portnumber);
Log.i(debugString, "Connection established!");
BufferedWriter bw = new BufferedWriter((new OutputStreamWriter(socket.getOutputStream())));
bw.write("" + userClass);
bw.newLine();
bw.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
input = br.readLine();
}
} catch (IOException e) {
Log.e(debugString, e.getMessage());
} finally {
threadComplete = true;
}
}
};
thread.start();
while(!threadComplete)
continue;
тогда я просто использовать эту тему, когда я хочу, чтобы получить обновленную информацию по моей просьбе, как, что:
String getUserClass = userClass;
if(!getUserClass.equals(""))
{
threadComplete = false;
userClass = getUserClass;
thread.start();
while (!threadComplete)
continue;
changes.setText(input);
}
else Toast.makeText(this, "Error, choose your class", Toast.LENGTH_SHORT).show();
Кстати, в конце каждого нить (на эмуляторе, потому что на моем телефоне он выходит из строя) я получаю сообщение: Skipped 91 frames! The application may be doing too much work on its main thread.
и у меня есть еще одна проблема, я также использовать IntentService
для запуска моей службы приложений на заднем плане, и очевидно, что я не хочу чтобы бегать постоянно навсегда, поэтому я сделал цикл, который содержит в конце каждого цикла команду wait()
, но проблема в том, что когда я устанавливаю время ожидания дольше 3000 миллисекунд или около того, служба аварийно завершает работу. мой код для фоновой службы:
synchronized (this) {
int count = 0;
while (count<4) {
try {
wait(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (notifications && !userClass.equals("")) {
new Thread() {
@Override
public void run() {
//server stuff
try {
//Connecting
if (!userClass.equals("")) {
Log.i("debug", "Attempting to connect to server");
socket = new Socket(hostname, portnumber);
Log.i("debug", "Connection established!");
BufferedWriter bw = new BufferedWriter((new OutputStreamWriter(socket.getOutputStream())));
bw.write("" + userClass);
bw.newLine();
bw.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
input = br.readLine();
}
} catch (IOException e) {
Log.e("debug", e.getMessage());
} finally {
complete = true;
}
}
}.start();
while (!complete)
continue;
Toast.makeText(this, "" + input, Toast.LENGTH_SHORT).show();
NotificationManager mNotifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.chanka)
.setContentTitle("ביטול שיעורים: ")
.setContentText(input);
mNotifyMgr.notify(mNotificationId, mBuilder.build());
mNotificationId++;
Toast.makeText(this, "" + input, Toast.LENGTH_SHORT).show();
count++;
}
}
}
убедитесь, что 'hostname url' является вашим личным ip – samirk433
@ samir.k433 Это не проблема, подключение работает, и я также создал java-сервер. Проблема в том, что соединение работает только тогда, когда я использую свой эмулятор ПК, и когда я пытаюсь запустить его на своем LG G3, он просто падает после запуска потока. , а также я получаю проблему: «Пропустили 91 фрейм! Приложение может слишком много работать над своим основным потоком. «В журнале, поэтому я считаю, что моя программа недостаточно эффективна, и тяжело работать для мобильного телефона, и я просто не знаю, как заставить ее работать и более эффективно. –