実際に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ミリ秒以上待つ時間を設定すると、サービスがクラッシュするということだ。 バックグラウンドサービスのための私のコード: - あなたは一種の長いループにメインスレッドを入れている
while (!threadComplete)
continue;
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++;
}
}
}
ホスト名urlがあなたのプライベートIPであることを確認してください – samirk433
@ samir.k433これは問題ではなく、接続が機能していて、私もjavaサーバを作ったのです。問題は、私のPCエミュレータを使用しているときにのみ接続が動作し、私はLG G3でそれを起動しようとすると、スレッドが起動するとただクラッシュするということです。 また、問題が発生します: '91フレームをスキップしました!アプリケーションはメインスレッドであまりにも多くの作業をしている可能性があります。」ログでは、私のプログラムは十分に効率的ではなく、携帯電話で走るのは重いと思うし、どうやって動作させるのか分からないより効率的です。 –