- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道之前有人问过同样的问题,我检查了他们,但没有帮助,所以我正在构建一个Android应用程序,并且我使用 ListView ,我在项目中添加了一个按钮,删除该条目,并且我想显示一个确认对话框。
当我按下该按钮时,应用程序崩溃了,当我搜索问题时,我发现我传递的上下文中有问题,我尝试了很多方法,但找不到解决方案,这是代码。这是项目适配器代码:
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
final View v;
LayoutInflater layoutInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = layoutInflater.inflate(R.layout.product_cell, null);
final Produit currentProduit = getItem(position);
getviews(v);
fillViews(currentProduit);
supprimer.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View view) {
MyMethodsClass.displayToast("i'm working dude", view.getContext());
AlertDialog.Builder confirmDialog;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
confirmDialog = new AlertDialog.Builder(v.getContext(), android.R.style.Theme_Material_Dialog_Alert);
else
confirmDialog = new AlertDialog.Builder(v.getContext());
confirmDialog.setTitle("Supprimer?");
confirmDialog.setMessage("Etes vous sur de vouloir supprimer le produit" + currentProduit.getNomP());
confirmDialog.setNegativeButton("Annuler", new AlertDialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
confirmDialog.setPositiveButton("Confirmer", new AlertDialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
deleteProduct(currentProduit);
productsAdapter.remove(currentProduit);
productsAdapter.notifyDataSetChanged();
}
}).show();
}
});
return v;
}
这是使用它的 Activity 的代码:
public class Stock extends AppCompatActivity implements View.OnClickListener {
String barcode;
EditText codebare, nomproduit;
Button scanbut, rechbut;
ListView stockProdList;
ArrayList<Produit> productsArray;
public static ProductsAdapter productsAdapter;
public Context context = this;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_supprimer_produit);
barcode = getIntent().getStringExtra("code");
codebare = (EditText) findViewById(R.id.rechStockEditScan);
nomproduit = (EditText) findViewById(R.id.rechStockNomP);
scanbut = (Button) findViewById(R.id.scannStock);
rechbut = (Button) findViewById(R.id.rechercheStock);
stockProdList = (ListView) findViewById(R.id.listStockSup);
productsAdapter = new ProductsAdapter(getApplicationContext(), 0);
productsArray = new ArrayList<>();
if (!TextUtils.isEmpty(barcode))
codebare.setText(barcode);
stockProdList.setAdapter(productsAdapter);
fillListView();
}
void searchProduct() {
productsArray.clear();
String query = "SELECT * FROM produit WHERE ";
if (!nomproduit.getText().toString().isEmpty() && !codebare.getText().toString().isEmpty()) {
query += "NOMP='" + nomproduit.getText().toString() + "' AND BAREC='" + codebare.getText().toString() + "';";
} else if (!nomproduit.getText().toString().isEmpty()) {
query += "NOMP='" + nomproduit.getText().toString() + "';";
} else if (!codebare.getText().toString().isEmpty()) {
query += "BAREC='" + codebare.getText().toString() + "';";
} else {
MyMethodsClass.displayToast("FAUT REMPLIRE AU MOIN UN CHAMP POUR RECHERCHER", this);
}
try {
Connection connection = DataBaseConnection.CONNECT();
Statement st = connection.createStatement();
ResultSet rs = st.executeQuery(query);
while (rs.next()) {
productsArray.add(new Produit(rs.getString("NOMP"), rs.getString("BAREC"), rs.getString("PHOTOP"), rs.getFloat("PRIXA"), rs.getFloat("PRIXG"),
rs.getFloat("PRIXD"), rs.getInt("QUANTITEP"), rs.getInt("NBREMBA"), rs.getInt("IDP")));
}
} catch (Exception e) {
Log.e("ERROR WHILE SEARCHING FOR DATA LINE 70", e.getMessage());
}
Log.e("what the hell?", "it's running");
productsAdapter.clear();
productsAdapter.addAll(productsArray);
stockProdList.setAdapter(null);
stockProdList.setAdapter(productsAdapter);
}
这是日志:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.simapps.mobilestock, PID: 9260
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
at android.view.ViewRootImpl.setView(ViewRootImpl.java:684)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:289)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
at android.app.Dialog.show(Dialog.java:311)
at android.app.AlertDialog$Builder.show(AlertDialog.java:993)
at Adapters.ProductsAdapter$1.onClick(ProductsAdapter.java:87)
at android.view.View.performClick(View.java:4855)
at android.view.View$PerformClick.run(View.java:20287)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5637)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
最佳答案
要显示Dialog
,您需要使用Activity
上下文。此处您使用的 Application
上下文是不正确的。
productsAdapter = new ProductsAdapter(getApplicationContext(), 0);
要使其正常工作,请更改上面的行以使用 Activity
上下文。由于此调用是在 Activity
内进行的,因此您可以使用:
productsAdapter = new ProductsAdapter(this, 0);
但这不是最好的方法,因为您的参数类型是 Context
而不是 Acticity
并且当它发生在您身上时,上下文可能不正确。
更好的想法是为您的 Activity
提供点击监听器回调,并管理 Activity
内的 Dialog
而不是 适配器
。
关于java - 警报对话框异常 "Unable to add windows -- token null is not for an application",我应该提供什么上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50916541/
我正在开发一个应用程序,它使用 OAuth - 基于 token 的身份验证。 考虑到我们拥有访问和刷新 token ,这就是流程的样子。 Api call -> intercepter append
如何取消标记此代码的输出? 类(class)核心: def __init__(self, user_input): pos = pop(user_input) subject = ""
当我使用命令 kubectl 时与 --token标记并指定 token ,它仍然使用 kubeconfig 中的管理员凭据文件。 这是我做的: NAMESPACE="default" SERVICE
我正在制作 SPA,并决定使用 JWT 进行身份验证/授权,并且我已经阅读了一些关于 Tokens 与 Cookies 的博客。我了解 cookie 授权的工作原理,并了解基本 token 授权的工作
我正在尝试从应用服务获取 Google 的刷新 token ,但无法。 日志说 2016-11-04T00:04:25 PID[500] Verbose Received request: GET h
我正在开发一个项目,只是为了为 java 开发人员测试 eclipse IDE。我是java新手,所以我想知道为什么它不起作用,因为我已经知道该怎么做了。这是代码: public class ecli
我正在尝试使用 JwtSecurityTokenHandler 将 token 字符串转换为 jwt token 。但它出现错误说 IDX12709: CanReadToken() returned
我已阅读文档 Authentication (来自 Facebook 的官方)。我仍然不明白 Facebook 提供的这三种访问 token 之间的区别。网站上给出了一些例子,但我还是不太明白。 每个
我的部署服务器有时有这个问题,这让我抓狂,因为我无法在本地主机中重现,我已经尝试在我的 web.config 中添加机器 key ,但没有成功远。 它只发生在登录页面。 我的布局:
我已经设法获得了一个简单的示例代码,它可以创建一个不记名 token ,还可以通过阅读 stackoverflow 上的其他论坛来通过刷新 token 请求新的不记名 token 。 启动类是这样的
如果我有以前的刷新 token 和使用纯 php 的访问 token ,没有 Google Api 库,是否可以刷新 Google Api token ?我在数据库中存储了许多用户刷新和访问 toke
我通过 Java 应用程序使用 Google 电子表格时遇到了问题。我创建了应用程序,该应用程序运行了 1 年多,没有任何问题,我什至在 Create Spreadsheet using Google
当我有一个有效的刷新 token 时,我正在尝试使用 Keycloak admin REST API 重新创建访问 token 。 我已经通过调用 POST/auth/realms/{realm}/p
我正在尝试让第三方 Java 客户端与我编写的 WCF 服务进行通信。 收到消息时出现如下异常: Cannot find a token authenticator for the 'System.I
在尝试将数据插入到我的 SQl 数据库时,我收到以下错误 System.Data.SqlServerCe.SqlCeException: There was an error parsing the
使用数据库 session token 系统,我可以让用户使用用户名/密码登录,服务器可以生成 token (例如 uuid)并将其存储在数据库中并将该 token 返回给客户端。其上的每个请求都将包
我最近注册了 Microsoft Azure 并设置了认知服务帐户。使用 Text Translation API Documentation 中的说明我能够使用 interactive online
我使用 IAntiforgery API 创建了一个 ASP.Net Core 2 应用程序。 这提供了一种返回 cookie 的方法。 客户端获取该 cookie,并在后续 POST 请求中将该值放
我正在使用 spacy 来匹配某些文本(意大利语)中的特定表达式。我的文本可以多种形式出现,我正在尝试学习编写一般规则的最佳方式。我有如下 4 个案例,我想写一个适用于所有案例的通用模式。像这样的东西
我无法理解 oauth 2.0 token 的原则处理。 我的场景是,我有一个基于 web 的前端后端系统,带有 node.js 和 angular 2。用户应该能够在此站点上上传视频。然后创建一些额
我是一名优秀的程序员,十分优秀!