首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我从另一个类调用该方法时,我的应用程序崩溃。

当我从另一个类调用该方法时,我的应用程序崩溃。
EN

Stack Overflow用户
提问于 2018-04-26 21:16:34
回答 2查看 151关注 0票数 1

我有个问题,如果有人帮忙,我会很高兴的!

这是崩溃日志:

代码语言:javascript
复制
FATAL EXCEPTION: main
Process: com.elvigo.swedencup.vigor, PID: 29477
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
   at android.content.ContextWrapper.getResources(ContextWrapper.java:90)
   at android.view.ContextThemeWrapper.getResourcesInternal(ContextThemeWrapper.java:127)
   at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:121)
   at android.support.v7.app.AppCompatActivity.getResources(AppCompatActivity.java:549)
   at android.view.View.<init>(View.java:4551)
   at android.view.View.<init>(View.java:4694)
   at android.view.ViewGroup.<init>(ViewGroup.java:597)
   at android.widget.LinearLayout.<init>(LinearLayout.java:234)
   at android.widget.LinearLayout.<init>(LinearLayout.java:230)
   at android.widget.LinearLayout.<init>(LinearLayout.java:226)
   at android.widget.LinearLayout.<init>(LinearLayout.java:222)
   at android.widget.TableRow.<init>(TableRow.java:60)
   at com.elvigo.swedencup.vigor.TeamScoreTableUI.addRows(TeamScoreTableUI.java:78)
   at com.elvigo.swedencup.vigor.TeamScoreTableUI.CalladdRows(TeamScoreTableUI.java:65)
   at com.elvigo.swedencup.vigor.Classes.MatchTableDataFeatching.onPostExecute(MatchTableDataFeatching.java:139)
   at com.elvigo.swedencup.vigor.Classes.MatchTableDataFeatching.onPostExecute(MatchTableDataFeatching.java:26)
   at android.os.AsyncTask.finish(AsyncTask.java:695)
   at android.os.AsyncTask.-wrap1(Unknown Source:0)
   at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712)
   at android.os.Handler.dispatchMessage(Handler.java:105)
   at android.os.Looper.loop(Looper.java:164)
   at android.app.ActivityThread.main(ActivityThread.java:6809)
   at java.lang.reflect.Method.invoke(Native Method)
   at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

以及包括被调用方法在内的活动:

代码语言:javascript
复制
public class TeamScoreTableUI extends AppCompatActivity {

public static TextView TextBox;
FloatingActionButton PrevScreenBtn;
public static TableLayout ll;


public static TextView textView;
public static TableRow row;


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


    MatchTableDataFeatching process = new MatchTableDataFeatching();
    process.execute();


    TextBox = (TextView) findViewById(R.id.TextBox);
    PrevScreenBtn = (FloatingActionButton) findViewById(R.id.BackButton);

    PrevScreenBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            finish();

        }
    });

    Context context = getApplicationContext();
    Toast toast = Toast.makeText(context, "FairPlayCup", Toast.LENGTH_SHORT);
    toast.show();

    ll = (TableLayout) findViewById(R.id.TableLayout);


}

public void CalladdRows(){

    addRows();

}


public void addRows() {



    //for (int i = 0; i < 2; i++) {

        Log.d("dataFeatchingDone", "done");

        row = new TableRow(this);
        TableRow.LayoutParams lp = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT);
        row.setLayoutParams(lp);
        TextView textView = new TextView(this);
        textView.setText("10");
        row.addView(textView);
        ll.addView(row, 1);
    //}

}
}

我还在调试模式下测试了这个应用程序,我发现它在: row =(这个)上崩溃了;

我正在调用"CalladdRows()“方法。

我用以下方式调用该方法:

代码语言:javascript
复制
@Override
protected void onPostExecute(Void aVoid) {
    super.onPostExecute(aVoid);

    Log.d("app", "onPostExecute");

    TeamScoreTableUI.TextBox.setText(this.dataParsed);

    TeamScoreTableUI TeamScoreTableUIAddRows = new TeamScoreTableUI();
    TeamScoreTableUIAddRows.CalladdRows();

}

该方法在TeamScoreTableUI中,称为CalladdRows。

如果有人能花点时间帮忙,我会很高兴的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-27 10:43:02

尝试使用以下更改:

代码语言:javascript
复制
1. Pass context to your Task

MatchTableDataFeatching process = new MatchTableDataFeatching(this);

2. Get context in your Task

Context context;
public MatchTableDataFeatching(Context c) {
    context = c;
}
.......
3. Then in your onPost

@Override
protected void onPostExecute(Void aVoid) {
    super.onPostExecute(aVoid);
    ((TeamScoreTableUI)context).TextBox.setText(this.dataParsed);
    ((TeamScoreTableUI)context).CalladdRows();

}
票数 0
EN

Stack Overflow用户

发布于 2018-04-27 09:00:40

在你的代码中

代码语言:javascript
复制
TeamScoreTableUI.TextBox.setText(this.dataParsed);

TeamScoreTableUI TeamScoreTableUIAddRows = new TeamScoreTableUI();
TeamScoreTableUIAddRows.CalladdRows();

您错误地创建了一个新活动,并在这个新创建的活动上调用"CalladdRows()“(而不是使用与设置"TextBox”相同的活动。

尝试将您的代码更改为

代码语言:javascript
复制
TeamScoreTableUI.TextBox.setText(this.dataParsed);       
TeamScoreTableUI.CalladdRows()

作为旁注

字段和方法名称中的大写大小写使代码难以阅读。我在找出asyncTask中的TeamScoreTableUI/TextBox是字段还是静态类时遇到了问题。

在JAVA中,通常使用小写字母(camelCase)作为字段、变量和方法名称;大写字母(PascalCase)用于类。

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

https://stackoverflow.com/questions/50051954

复制
相关文章

相似问题

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