我正在尝试使用BroadcastReceiver构建此网络连接。当连接不存在时,它将显示一个警告对话框,告诉用户重试连接。我无法让这部分工作。它显示“The constructor AlertDialog.Builder(ConnectionDetector) is undefined
”和“The method makeText(Context, CharSequence, int) in the type Toast is not applicable for the arguments (ConnectionDetector, String, int)
”。我想我搞砸了我的代码。最后一个问题是如何重试按钮?这里对Android很新。感谢
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.widget.Toast;
/**
* This broadcast receiver is awoken after boot and registers the service that
* checks for new photos from all the known contacts.
*/
public class ConnectionDetector extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent) {
boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,false);
if(noConnectivity){
Toast.makeText(context, "Internet Connection Required" , Toast.LENGTH_LONG).show();
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setCancelable(true);
// builder.setIcon(R.drawable.dialog_question);
builder.setTitle("Title");
builder.setInverseBackgroundForced(true);
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
alert.show();
//System.exit(0);
//Show Warning Message
//Close Application the way i suggested
}
}
}
Logcat:App崩溃
08-22 13:56:31.899: E/AndroidRuntime(29026): FATAL EXCEPTION: main
08-22 13:56:31.899: E/AndroidRuntime(29026): java.lang.RuntimeException: Unable to start receiver com.example.androidhive.ConnectionDetector: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
08-22 13:56:31.899: E/AndroidRuntime(29026): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2140)
08-22 13:56:31.899: E/AndroidRuntime(29026): at android.app.ActivityThread.access$1500(ActivityThread.java:127)
08-22 13:56:31.899: E/AndroidRuntime(29026): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1211)
08-22 13:56:31.899: E/AndroidRuntime(29026): at android.os.Handler.dispatchMessage(Handler.java:99)
08-22 13:56:31.899: E/AndroidRuntime(29026): at android.os.Looper.loop(Looper.java:137)
08-22 13:56:31.899: E/AndroidRuntime(29026): at android.app.ActivityThread.main(ActivityThread.java:4512)
08-22 13:56:31.899: E/AndroidRuntime(29026): at java.lang.reflect.Method.invokeNative(Native Method)
08-22 13:56:31.899: E/AndroidRuntime(29026): at java.lang.reflect.Method.invoke(Method.java:511)
08-22 13:56:31.899: E/AndroidRuntime(29026): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:982)
08-22 13:56:31.899: E/AndroidRuntime(29026): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)
08-22 13:56:31.899: E/AndroidRuntime(29026): at dalvik.system.NativeStart.main(Native Method)
08-22 13:56:31.899: E/AndroidRuntime(29026): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
08-22 13:56:31.899: E/AndroidRuntime(29026): at android.view.ViewRootImpl.setView(ViewRootImpl.java:693)
08-22 13:56:31.899: E/AndroidRuntime(29026): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:301)
08-22 13:56:31.899: E/AndroidRuntime(29026): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215)
08-22 13:56:31.899: E/AndroidRuntime(29026): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140)
08-22 13:56:31.899: E/AndroidRuntime(29026): at android.app.Dialog.show(Dialog.java:278)
08-22 13:56:31.899: E/AndroidRuntime(29026): at com.example.androidhive.ConnectionDetector.onReceive(ConnectionDetector.java:52)
08-22 13:56:31.899: E/AndroidRuntime(29026): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2133)
08-22 13:56:31.899: E/AndroidRuntime(29026): ... 10 more
答案 0 :(得分:1)
因为你试图传递错误的上下文
替换
AlertDialog.Builder builder = new AlertDialog.Builder(this);
通过
AlertDialog.Builder builder = new AlertDialog.Builder(context);
和
替换
Toast.makeText(this, "Internet Connection Required" , Toast.LENGTH_LONG).show();
通过
Toast.makeText(context, "Internet Connection Required" , Toast.LENGTH_LONG).show();