【问题标题】:How can this TextView be Null?这个 TextView 怎么会是 Null?
【发布时间】:2016-10-06 00:50:31
【问题描述】:

所以我给自己布置了一个家庭作业:创建一个类来进行计算,然后将该变量返回给 MainActivity 进行显示

我认为这很简单,但由于某种原因,我的 TextView 始终为空。当我尝试在新文件中重新创建错误时,TextView 没有出现错误 - 我可以将其设置得很好。

我已经在代码运行时记录了这些值,因此变量似乎正确地传递了数据。但是当我尝试将 ANY 值推送到我的 textView 中时,我得到了错误。

这里是:

 package com.kserrattan.clickerdemo001;

 import android.support.v7.app.ActionBarActivity;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
 import android.widget.TextView;

 import org.w3c.dom.Text;


 public class MainActivity extends ActionBarActivity {

String countString;
TextView displayCount;
View parent;

public void playerTapped(View view) {

    MathCalculations mathCalculations = new MathCalculations();
    //parent = (View) view.getRootView();
    mathCalculations.addCount();

}

public void getCount(int count) {

    Log.i("addCount", Integer.toString(count));
    countString = (Integer.toString(count));
    displayString();

}

public void displayString() {

    displayCount.setText("HIE");

}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    displayCount = (TextView) findViewById(R.id.countText);


}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
 }

二等:

package com.kserrattan.clickerdemo001;

import android.util.Log;

/**
 * Created by Kris on 05/10/2016.
 */
public class MathCalculations {

int tapCounter;

public void addCount() {

    Log.i("addCount", "HERE");
    tapCounter += 1;
    MainActivity mainActivity = new MainActivity();
    mainActivity.getCount(tapCounter);

}

}

我只能提供部分错误,因为由于某种未知原因,其余错误的格式不正确!希望这一点就足够了……:

--------- beginning of crash
10-05 20:00:51.640    2375-2375/com.kserrattan.clickerdemo001     E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.kserrattan.clickerdemo001, PID: 2375
java.lang.IllegalStateException: Could not execute method of the activity
        at android.view.View$1.onClick(View.java:4007)
        at android.view.View.performClick(View.java:4756)
        at android.view.View$PerformClick.run(View.java:19749)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        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:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
 Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at android.view.View$1.onClick(View.java:4002)

【问题讨论】:

  • 您不应该自己创建Activity。删除此代码:MainActivity mainActivity = new MainActivity();
  • 删除后怎么办?我想了解为什么我不应该做我所做的事情......但你的简短回应并没有让我理解。

标签: android null textview


【解决方案1】:

将您的TextView 设为MainActivity 中的静态变量

 public class MainActivity extends ActionBarActivity {

   String countString;
   public static TextView displayCount;
   View parent;

   public void playerTapped(View view) {

     MathCalculations mathCalculations = new MathCalculations();
     //parent = (View) view.getRootView();
     mathCalculations.addCount();

   }

   public static void getCount(int count) {

     Log.i("addCount", Integer.toString(count));
     countString = (Integer.toString(count));
     displayString();

   }

   public static void displayString() {

     displayCount.setText("HIE");

   }

   //...
 }

静态变量只会在关闭应用后被垃圾回收

【讨论】:

  • 这没有任何问题,感谢您的解决方案。我将查找一些资源以了解其工作原理;但是,您能详细说明或指导我找到资源吗?
  • 我在这个线程上阅读了更多内容:(stackoverflow.com/questions/413898/…),我明白为什么上面的方法现在有效,再次感谢 ;)
【解决方案2】:

您需要活动上下文来调用其方法。 在 onCreate 方法中创建上下文值:

public class MainActivity extends ActionBarActivity {

String countString;
TextView displayCount;
View parent;
Context mContext; 


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mContext = this;
    displayCount = (TextView) findViewById(R.id.countText);
}

然后在调用 addCount() 时传递此上下文:

public void playerTapped(View view) {
    MathCalculations mathCalculations = new MathCalculations();
    //parent = (View) view.getRootView();
    mathCalculations.addCount(mContext);
}

修改 addCount() 以使用上下文:

public void addCount(Context mContext) {
    Log.i("addCount", "HERE");
    tapCounter += 1;
    mContext.getCount(tapCounter);
}

【讨论】:

  • 我进行了上述更改,沿途传递上下文是有意义的,但添加“mContext.getCount”会使“getCount”无法解析。我想知道为什么,你能详细说明一下吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-24
  • 1970-01-01
  • 2018-05-01
  • 2022-01-09
相关资源
最近更新 更多