我正在使用OkHttp并且一切正常,但是,我想考虑DNS解析关闭,服务器关闭,速度缓慢或只是返回HTTP状态代码200之外的其他情况.我试过了使用Toast,但我不能,因为这是在另一个线程(?)上完成的.我如何克服这个障碍并为用户提供更好的体验?这是我的代码:
private void getBinary(String text) throws Exception {
OkHttpClient client = new OkHttpClient();
String body = URLEncoder.encode(text, "utf-8");
// Encrypt
MCrypt mcrypt = new MCrypt();
String encrypted = MCrypt.bytesToHex(mcrypt.encrypt(body));
Request request = new Request.Builder()
.url("http://mysite/my_api.php")
.post(RequestBody.create(MediaType.parse("text/plain"), encrypted))
.addHeader("User-Agent", System.getProperty("http.agent"))
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onResponse(Response response) throws IOException, RuntimeException {
if (response.code() != 200){
Toast.makeText(getSherlockActivity(), "Fail", Toast.LENGTH_LONG).show();
return;
}
saveResponseToFile(response);
}
@Override
public void onFailure(Request arg0, IOException arg1) {
Toast.makeText(getSherlockActivity(), "Bigger fail", Toast.LENGTH_LONG).show();
}
});
}
Run Code Online (Sandbox Code Playgroud)
这是崩溃:
FATAL …Run Code Online (Sandbox Code Playgroud) 我的设备运行Android 5.1.1,我发现如果我使用
Toast.makeText(this, "This is a toast", Toast.LENGTH_SHORT).show();
Run Code Online (Sandbox Code Playgroud)
我懂了:
但如果我用getApplicationContext()而不是this,
Toast.makeText(getApplicationContext(), "This is a toast", Toast.LENGTH_SHORT).show();
Run Code Online (Sandbox Code Playgroud)
我懂了:
两者都是直接从活动中调用的.
为什么是这样?
android android-context android-toast android-5.1.1-lollipop
当我从Android片段调用toast("Toast的消息文本")时,我遇到了以下错误:
java.lang.NoSuchMethodError:没有虚方法getActivity()Landroid/app/Activity; 在课堂上Landroid/support/v4/app/Fragment; 或其超类('android.support.v4.app.Fragment'的声明出现在name-of-the-files-classes.dex中)
我正在使用Anko v0.9.1和Kotlin 1.0.6
可能是造成这次事故的原因是什么?标准Android Toast工作得很好.toast()函数也可以在Activities中运行.
当我在我的应用程序上做自定义 Toast 时,我注意到 setView 已被弃用。
有没有人对此有解决方案?
toast.setView(customView);
Run Code Online (Sandbox Code Playgroud) 我希望一个Toast消息显示在一个位置,另一个Toast消息同时显示在另一个位置.
多个Toast消息似乎总是按顺序排队和显示.是否可以同时显示两条消息?
是否有一种解决方法,至少提供该外观,并不涉及搞乱活动布局?
编辑:似乎第一个问题的答案是否定的,这是不可能的.解决方法怎么样?对我来说,一个解决方案包括像Toast一样出现在应用程序之上的东西,并且不会干扰用户与应用程序的交互(因此,不是AlertDialogue或任何调用onPause()等的东西).
我花了好几个小时试图修复应用程序崩溃,我认为值得一个问题:
例外情况:
java.lang.IllegalStateException: View android.widget.LinearLayout{41a97eb8 V.E..... ......ID 0,0-540,105 #7f0b020d app:id/toast_layout_root} has already been added to the window manager.
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:223)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.widget.Toast$TN.handleShow(Toast.java:402)
at android.widget.Toast$TN$1.run(Toast.java:310)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5136)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(NativeStart.java)
Run Code Online (Sandbox Code Playgroud)
代码:
我有一个跟随本指南的自定义吐司
我定义了自定义toast as ToastMessageBar.java,构造函数如下所示:
public ToastMessageBar(Activity activity) {
LayoutInflater inflater = activity.getLayoutInflater;
mToastLayout = inflater.inflate(R.layout.toast_layout,
(ViewGroup) activity.findViewById(R.id.toast_layout_root));
mMessageView = (TextView) mToastLayout.findViewById(R.id.toast_message);
mSubtitleView = (TextView) mToastLayout.findViewById(R.id.toast_subtitle);
}
Run Code Online (Sandbox Code Playgroud)
我显示祝酒词的方式如下:
private void showMessage(MessageType type, String …Run Code Online (Sandbox Code Playgroud) 我刚学会了我可以使用:
Toast.makeText(MainActivity.this, R.string.some_string,Toast.LENGTH_SHORT).show();
Run Code Online (Sandbox Code Playgroud)
要么,
Toast.makeText(getApplicationContext(), R.string.some_string,Toast.LENGTH_SHORT).show();
Run Code Online (Sandbox Code Playgroud)
在Android中显示Toast.
之前我认为上下文实际上是父窗口的一种句柄,应该显示它,但文档不清楚这一点.
它似乎也没有提到准确用于Toast的上下文?
像Toast这样的子窗口的上下文是"父窗口的句柄"吗?或者它实际上允许Toast.makeText访问资源或什么?
如果上下文无关紧要,为什么要使用呢?
根据https://developer.android.com/about/versions/11/behavior-changes-11#toasts,Toasts 应该仍然可以正常用于 Android11(仅 setView() 已弃用)。
请注意,仍然允许文本吐司;这些是使用不调用 setView() 的 Toast.makeText() 创建的吐司。
但是,我无法为运行 SDK30 的模拟器显示 Toast
compileSdkVersion 30
buildToolsVersion "30.0.3"
and with targetSdkVersion 30
Run Code Online (Sandbox Code Playgroud)
使用的代码只是一个简单的
Toast.makeText(getApplicationContext(), "HELLO WORLD", Toast.LENGTH_SHORT).show();
Run Code Online (Sandbox Code Playgroud)
当我将 targetSdk 更改为 29(或设备 <SDK30)时,会显示吐司。
我是否需要在清单文件中为 Toast 添加任何 <queries> 标签? https://developer.android.com/about/versions/11/privacy/package-visibility
我也试过以下没有运气。
我想创建一个代码来点击 RecyclerView 的项目。我从互联网上找到了一个,但是它不断收到此错误:
不能使用提供的参数调用以下函数:
public open fun makeText(p0: Context!, p1: CharSequence!, p2: Int): Toast! 在 android.widget.Toast 中定义
public open fun makeText(p0: Context!, p1: Int, p2: Int): Toast! 在 android.widget.Toast 中定义
这是我的代码:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
recyclerView.layoutManager = LinearLayoutManager(this, RecyclerView.VERTICAL, false)
val users = ArrayList<User>()
val adapter = CustomAdapter(users)
recyclerView.adapter = adapter
recyclerView.addOnItemClickListener(object : OnItemClickListener {
override fun onItemClicked(position: Int, view: View) {
Toast.makeText(this, "Clicked on " + users.get(position).name, Toast.LENGTH_LONG).show()
}
})
}
interface OnItemClickListener {
fun onItemClicked(position: …Run Code Online (Sandbox Code Playgroud)