ste*_*wpf 234 android android-intent
出于调试原因,我想列出Intent的所有额外内容(及其值).现在,获取密钥不是问题
Set<String> keys = intent.getExtras().keySet();
Run Code Online (Sandbox Code Playgroud)
但获取键的值对我来说是一个,因为一些值是字符串,一些是布尔值...我怎么能在循环中获取值(循环键)并将值写入日志文件?谢谢你的提示!
ksh*_*har 440
以下是我用来获取有关未记录(第三方)意图的信息:
Bundle bundle = intent.getExtras();
if (bundle != null) {
for (String key : bundle.keySet()) {
Log.e(TAG, key + " : " + (bundle.get(key) != null ? bundle.get(key) : "NULL"));
}
}
Run Code Online (Sandbox Code Playgroud)
(确保bundle在循环之前检查是否为null)
Pra*_*tik 107
这就是我如何定义实用程序方法来转储Intent的所有额外内容.
import java.util.Iterator;
import java.util.Set;
import android.os.Bundle;
public static void dumpIntent(Intent i){
Bundle bundle = i.getExtras();
if (bundle != null) {
Set<String> keys = bundle.keySet();
Iterator<String> it = keys.iterator();
Log.e(LOG_TAG,"Dumping Intent start");
while (it.hasNext()) {
String key = it.next();
Log.e(LOG_TAG,"[" + key + "=" + bundle.get(key)+"]");
}
Log.e(LOG_TAG,"Dumping Intent end");
}
}
Run Code Online (Sandbox Code Playgroud)
Ale*_*ang 30
你可以在一行代码中完成它:
Log.d("intent URI", intent.toUri(0));
Run Code Online (Sandbox Code Playgroud)
它输出如下:
"#Intent; action = android.intent.action.MAIN; category = android.intent.category.LAUNCHER; launchFlags = 0x10a00000; component = com.mydomain.myapp/.StartActivity; sourceBounds = 12%20870%20276%201167; l .profile = 0;结束"
在这个字符串的末尾(我加粗的部分)你可以找到额外的列表(在这个例子中只有一个额外的).
这是根据toUri文档:"URI包含Intent的数据作为基本URI,附加片段描述了操作,类别,类型,标志,包,组件和附加内容."
ruX*_*ruX 17
用于在调试模式下进行评估的 Kotlin 解决方案:
// list: List<Pair<String!, Any?>>?
val list = intent.extras?.keySet()?.map { it to (intent.extras?.get(it) ?: "null") }
Log.d("list", list.toString();
Run Code Online (Sandbox Code Playgroud)
这将打印捆绑包中所有额外内容的列表extras
use*_*321 12
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tv = new TextView(this);
tv.setText("Extras: \n\r");
setContentView(tv);
StringBuilder str = new StringBuilder();
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
Set<String> keys = bundle.keySet();
Iterator<String> it = keys.iterator();
while (it.hasNext()) {
String key = it.next();
str.append(key);
str.append(":");
str.append(bundle.get(key));
str.append("\n\r");
}
tv.setText(str.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
Bundle的get(String key)方法返回一个Object.最好的办法是旋转每个键上调用get(String)的键集,并使用Object上的toString()输出它们.这对于原语最有效,但是你可能会遇到没有实现toString()的对象的问题.
我想要一种将意图的内容输出到日志的方法,并且能够轻松阅读它,所以这就是我想出的。我创建了一个LogUtil类,然后dumpIntent()采用@Pratik 创建的方法,并对其进行了一些修改。这就是它的样子:
public class LogUtil {
private static final String TAG = "IntentDump";
public static void dumpIntent(Intent i){
Bundle bundle = i.getExtras();
if (bundle != null) {
Set<String> keys = bundle.keySet();
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("IntentDump \n\r");
stringBuilder.append("-------------------------------------------------------------\n\r");
for (String key : keys) {
stringBuilder.append(key).append("=").append(bundle.get(key)).append("\n\r");
}
stringBuilder.append("-------------------------------------------------------------\n\r");
Log.i(TAG, stringBuilder.toString());
}
}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助某人!
| 归档时间: |
|
| 查看次数: |
105692 次 |
| 最近记录: |