首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TextView不显示日志

TextView不显示日志
EN

Stack Overflow用户
提问于 2015-11-21 16:44:45
回答 1查看 78关注 0票数 0

好吧,我是android的新手,我一直在学习一门课程,但是有些事情我不明白。

这是LifeCycleT活动。

代码语言:javascript
复制
package com.example.killtheviolence.myapplication;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class LifeCycleT extends Activity {
    StringBuilder builde = new StringBuilder();
    TextView textview;

    private void  log(String text) {
        Log.d("LifeCycleT", text);
        builde.append( builde.toString() );
        builde.append("\n");
        textview.setText(builde.toString());
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView textview = new TextView(this);
        textview.setText(builde.toString());
        setContentView(textview);
    }

    protected void onResume() {
        super.onResume();
        log("resume");
    }

    protected void onPause() {
        super.onPause();
        log("paused");
        if(isFinishing()) {
            log("death");
        }
    }
}

这是从哪来的?从一个ListView

代码语言:javascript
复制
package com.example.killtheviolence.myapplication;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;

public class MainActivity extends ListActivity {
    String prueva[] = {"LifeCycleT","item2","item3","item4",
            "item5 ", "item6 "};

    public void onCreate(Bundle savedInstanceSate){
        super.onCreate(savedInstanceSate);
        setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, prueva));
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        String gate = prueva[position];

        try {
            Class<?> inst;
            inst = Class.forName("com.example.killtheviolence.myapplication." + gate);
            Intent intent = new Intent(this, inst);
            startActivity(intent);

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

这是主要的活动。

我想在TextView中显示的是屏幕上的Log.d,但我得到了一个错误:

无法恢复活动{com.example.killtheviolence.myapplication/com.example.killtheviolence.myapplication.LifeCycleT}:java.lang.NullPointerException

因此,我寻找了一个原因(对于NullPointerException来说,这意味着我在初始化textview.setText(builde.toString());之前使用了TextView ),我所做的就是在log函数中创建TextView实例。

代码语言:javascript
复制
private void  log(String text) {
    Log.d("LifeCycleT", text);
    builde.append(builde.toString());
    builde.append("\n");
    TextView textview = new TextView(this);
    textview.setText(builde.toString());
}

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    TextView textview = new TextView(this);
    textview.setText(builde.toString());
    setContentView(textview);
}

为什么我要创建两个TextView实例?为什么我要去setText两次?为什么它在TextView中没有显示任何东西?(仅当我在"string"的参数中编写setText时才显示出来。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-21 17:20:27

修正onCreate设置字段参数而不是本地参数:

代码语言:javascript
复制
@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    textview = new TextView(this); // << This used to be a local var, thats why NPE
    textview.setText(builde.toString());
    setContentView(textview);
}

然后将TextView的第二次创建从log中删除

代码语言:javascript
复制
private void log(String text) {
    Log.d("LifeCycleT", text);
    builde.append("\n");
    builde.append(text);
    textview.setText(builde.toString());
}

还请注意,我更改了您的StringBuilder,将您作为参数传递给log方法的文本附加到

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33845929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档