アプリでHandler
を使用しようとしています。しかし、このようにインスタンス化すると:
Handler handler = new Handler();
次のエラーが表示されます。
Gradle: error: Handler is abstract; cannot be instantiated
そして、ソリューションを確認すると、これらのメソッドを実装するように求められます。
Handler handler = new Handler() {
@Override
public void close() {
}
@Override
public void flush() {
}
@Override
public void publish(LogRecord record) {
}
};
以前にHandlers
を使用したことはなく、少し遅れてメソッドを呼び出すためだけに使用しています。それを達成するために、私は使用しました:
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Do something after 100ms
}
}, 100);
しかし、それはエラーを示しています:
Gradle: error: cannot find symbol method postDelayed(<anonymous Runnable>,int)
助けてください!前もって感謝します。
間違ったHandlerクラスをインポートしたようです
import Java.util.logging.Handler;
に変更する
import Android.os.Handler;
代わりに
import Java.util.logging.Handler;
追加
import Android.os.Handler;
また使用する場合
Handler handler = new Handler() {
@Override
public void close() {
}
@Override
public void flush() {
}
@Override
public void publish(LogRecord record) {
}
};
それはブール値がエラーのような何かを見つけたというエラーを与えるので、ブールハンドラー= new Handler()...を使用するか、単に(new Handler()){.... `を使用します
import Android.os.Bundle;
import Android.os.Handler;
import Android.support.v7.app.ActionBarActivity;
import Android.util.Log;
import Android.view.View;
import Android.widget.Button;
import Android.widget.TextView;
public class ActionActivity extends ActionBarActivity {
final String LOG_TAG = "myLogs";
TextView tvInfo;
Button btnStart;
Handler h;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.action_activity);
tvInfo = (TextView)findViewById(R.id.tvinfo);
btnStart = (Button)findViewById(R.id.btnstart);
h = new Handler() {
public void handleMessage(Android.os.Message msg) {
// update TextView
tvInfo.setText("Закачано файлов: " + msg.what);
if (msg.what == 10) btnStart.setEnabled(true);
};
};
}
public void onclick(View v) {
switch (v.getId()) {
case R.id.btnstart:
btnStart.setEnabled(false);
Thread t = new Thread(new Runnable() {
public void run() {
for (int i = 1; i <= 10; i++) {
// some process
downloadFile();
h.sendEmptyMessage(i);
Log.d(LOG_TAG, "i = " + i);
}
}
});
t.start();
break;
case R.id.btnTets:
Log.d(LOG_TAG, "test");
break;
default:
break;
}
}
public void downloadFile(){
try{
TimeUnit.SECONDS.sleep(1);
}
catch (InterruptedException e){
e.printStackTrace();
};
}
}
Android SDKは、誤ったものを自動インポートします。それが人々に問題がある理由です。
import Android.os.Handler;これはハンドラーがあなたの紫に必要でした。 Handlerクラスをインポートする前に、上記をインポートしてみてください。