Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中动态初始化TableRows时的NPE_Android_Tablerow - Fatal编程技术网

在Android中动态初始化TableRows时的NPE

在Android中动态初始化TableRows时的NPE,android,tablerow,Android,Tablerow,我是Android开发的新手,现在面临一个致命的错误。我想用动态添加的TableRows创建一个表。在makeNewRow()的第二行,我得到一个NullPointerException。在这里发布的其他问题中,我了解到在初始化TableRow之前可能不会设置ContentView,但我的onCreate方法工作正常。在手机上测试该应用程序时,我会在应用程序崩溃之前在屏幕上看到已经包含一行的TableLayout。 然而,我想这是我的“这个”有什么问题,但我没有找到任何帮助,迄今为止 请注意理解

我是Android开发的新手,现在面临一个致命的错误。我想用动态添加的TableRows创建一个表。在makeNewRow()的第二行,我得到一个NullPointerException。在这里发布的其他问题中,我了解到在初始化TableRow之前可能不会设置ContentView,但我的onCreate方法工作正常。在手机上测试该应用程序时,我会在应用程序崩溃之前在屏幕上看到已经包含一行的TableLayout。 然而,我想这是我的“这个”有什么问题,但我没有找到任何帮助,迄今为止

请注意理解代码:AsyncTask JSONDownload返回一个JSONArray并在其postExecute()方法中调用makeNewRow()。JSONArray已正确填充

package com.***;

import org.json.JSONArray;
import org.json.JSONException;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.ViewGroup.LayoutParams;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;

public class Tabelle extends Activity {

url= "***";
JSONDownloader jdown;
TableLayout tl;


@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tabelle);
    tl = (TableLayout) findViewById(R.id.tabelleLayout);
    new JSONDownloader().execute(url);
}

public void makeNewRow(JSONArray platzierung, int row) {
    row++;
    TableRow tr = new TableRow(this);
    tr.setId(100+row);
    tr.setLayoutParams(
            new LayoutParams(
                    LayoutParams.MATCH_PARENT,
                    LayoutParams.WRAP_CONTENT)
            );

    TextView platz = new TextView(this);
    platz.setId(200+row);
    platz.setText(row);
    platz.setLayoutParams(
            new TableRow.LayoutParams(
                    0,
                    LayoutParams.WRAP_CONTENT,
                    1f)
            );
    tr.addView(platz);

    /**other textviews **/

    tl.addView(tr);
}
  }
日志:

11-04 17:26:59.859: E/AndroidRuntime(5389): FATAL EXCEPTION: main
11-04 17:26:59.859: E/AndroidRuntime(5389): java.lang.NullPointerException
11-04 17:26:59.859: E/AndroidRuntime(5389): at android.content.ContextWrapper.getResources(ContextWrapper.java:81)
11-04 17:26:59.859: E/AndroidRuntime(5389): at android.view.View.<init>(View.java:3228)
11-04 17:26:59.859: E/AndroidRuntime(5389): at android.view.ViewGroup.<init>(ViewGroup.java:416)
11-04 17:26:59.859: E/AndroidRuntime(5389): at android.widget.LinearLayout.<init>(LinearLayout.java:168)
11-04 17:26:59.859: E/AndroidRuntime(5389): at android.widget.TableRow.<init>(TableRow.java:61)
11-04 17:26:59.859: E/AndroidRuntime(5389): at com.***.Tabelle.makeNewRow(Tabelle.java:51)
11-04 17:26:59.859: E/AndroidRuntime(5389): at com.***.Tabelle.showTable(Tabelle.java:37)
11-04 17:26:59.859: E/AndroidRuntime(5389): at com.***.JSONDownloader.onPostExecute(JSONDownloader.java:79)
11-04 17:26:59.859: E/AndroidRuntime(5389): at com.***.JSONDownloader.onPostExecute(JSONDownloader.java:1)
11-04 17:26:59.859: E/AndroidRuntime(5389): at android.os.AsyncTask.finish(AsyncTask.java:631)
11-04 17:26:59.859: E/AndroidRuntime(5389): at android.os.AsyncTask.access$600(AsyncTask.java:177)
11-04 17:26:59.859: E/AndroidRuntime(5389): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
11-04 17:26:59.859: E/AndroidRuntime(5389): at android.os.Handler.dispatchMessage(Handler.java:99)
11-04 17:26:59.859: E/AndroidRuntime(5389): at android.os.Looper.loop(Looper.java:137)
11-04 17:26:59.859: E/AndroidRuntime(5389): at android.app.ActivityThread.main(ActivityThread.java:4931)
11-04 17:26:59.859: E/AndroidRuntime(5389): at java.lang.reflect.Method.invokeNative(Native Method)
11-04 17:26:59.859: E/AndroidRuntime(5389): at java.lang.reflect.Method.invoke(Method.java:511)
11-04 17:26:59.859: E/AndroidRuntime(5389): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
11-04 17:26:59.859: E/AndroidRuntime(5389): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
11-04 17:26:59.859: E/AndroidRuntime(5389):     at dalvik.system.NativeStart.main(Native Method)

我看到您添加了
onPostExecute()
方法,错误现在可以理解了。您试图(错误地)创建新活动,而不是使用现有活动。试试这个:

@Override
protected void onPostExecute (JSONArray jarray){
    Tabelle.this.showTable(jarray);
}

请正确格式化日志,并为onPostExecute添加代码。非常感谢!这就解决了问题!现在,在你提到它之后,我突然明白了。有时候最简单的事情会出错。。。
@Override
protected void onPostExecute (JSONArray jarray){
    Tabelle.this.showTable(jarray);
}