使用int-id Android SDK向布局添加视图时应用程序崩溃
基本上,代码的要点是以一种将要创建的视图放置在前面提到的视图中的方式来解释字符串使用int-id Android SDK向布局添加视图时应用程序崩溃,android,view,assign,Android,View,Assign,基本上,代码的要点是以一种将要创建的视图放置在前面提到的视图中的方式来解释字符串 % $- background:#000000 % Hello, World. % $- background:#ffffff % $+ id:test type:container % Test 这是它的代码 new Thread() { StringBuilder text = new StringBuilder(); @Override public voi
% $- background:#000000 %
Hello, World.
% $- background:#ffffff %
$+ id:test type:container %
Test
这是它的代码
new Thread() {
StringBuilder text = new StringBuilder();
@Override
public void run() {
try
{
String str = "";
URL url = new URL("http://example.com/" + mes + "/" + mes + ".meb");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
while ((str = in.readLine()) != null) {
text.append(str);
}
in.close();
} catch (MalformedURLException e1)
{
}
catch (IOException e)
{
}
if(message.contains(".meb")) {
String strn = text.toString().replace("\n", "").replace("\r", "");
String str[] = strn.toString().split("%");
int relative2 = 0;
final int relative = relative2;
for (final String l : str) {
String code[] = l.split(" ");
if (l.toString().contains("$-")) {
for(String p : code)
{
if(p.toString().contains("background"))
{
final String set[] = p.toString().split(":");
runOnUiThread(new Runnable() {
@Override
public void run() {
(findViewById(R.id.body)).setBackgroundColor(Color.parseColor(set[1]));
}
});
}
}
}
else if(l.toString().contains("$+"))
{
String[] g = code[2].split(":");
String[] c = code[3].split(":");
final String[] test = {g[1], "100"};
globvar.add(test);
if(c[1].toString().equals("container")) {
runOnUiThread(new Runnable() {
@Override
public void run() {
final LinearLayout element = new LinearLayout(getApplicationContext());
element.setBackgroundColor(Color.parseColor("#FFFFFF"));
element.setMinimumHeight(50);
element.setId(Integer.parseInt(test[1]));
((LinearLayout) findViewById(relative)).addView(element);
}
});
relative2 = Integer.parseInt(test[1]);
}
}
else {
if(!l.toString().isEmpty()) {
runOnUiThread(new Runnable() {
@Override
public void run() {
final TextView tv = new TextView(getApplicationContext());
tv.setTextColor(Color.parseColor("#000000"));
tv.setTextSize(18);
tv.setText(l);
((LinearLayout) findViewById(relative)).addView(tv);
}
});
}
}
}
}
else {
if(message == null) {
runOnUiThread(new Runnable() {
@Override
public void run() {
}
});
}
}
}
}.start();
当应用程序崩溃时,我得到以下logcat错误:
08-01 19:44:27.149 29893 29893 E AndroidRuntime: FATAL EXCEPTION: main
08-01 19:44:27.149 29893 29893 E AndroidRuntime: java.lang.NullPointerException
08-01 19:44:27.149 29893 29893 E AndroidRuntime: at example.yemeb.List$1$3.run(List.java:116)
08-01 19:44:27.149 29893 29893 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:615)
08-01 19:44:27.149 29893 29893 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:92)
08-01 19:44:27.149 29893 29893 E AndroidRuntime: at android.os.Looper.loop(Looper.java:137)
08-01 19:44:27.149 29893 29893 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:4931)
08-01 19:44:27.149 29893 29893 E AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method)
08-01 19:44:27.149 29893 29893 E AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:511)
08-01 19:44:27.149 29893 29893 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
08-01 19:44:27.149 29893 29893 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
08-01 19:44:27.149 29893 29893 E AndroidRuntime: at dalvik.system.NativeStart.main(Native Method)
此日志显示错误发生在((LinearLayout)findViewById(relative)).addView(tv);第116行
我的代码有什么问题?由于以下代码
int relative2 = 0;
final int relative = relative2;
相对值为0,这是最终值,无法更改。
因此,当您执行((LinearLayout)findViewById(relative))
时,它变得像((LinearLayout)findViewById(0))
。由于没有与id 0关联的视图,因此无法获取对该视图的引用,因此该值为null。当您尝试向其中添加视图时,会出现nullpointer异常
从医生那里读,上面说
从创建的XML中查找由id属性标识的视图
已在onCreate(Bundle)中处理
如果找到,则返回视图,否则返回null
因此,在您的案例中,基本上要确保当您尝试按id查找视图时,该视图存在于xml布局文件中,并为其分配了正确的id。因此,当生成
R.java
文件时,该id将映射到一个int值。行列表中是什么。java:116?发布整个代码我声明第16行的错误是((LinearLayout)findViewById(relative)).addView(tv);。发布整个类以及用作布局的xml感谢帮助。我希望我能弄明白。