我是Android開發新手,現在面臨致命錯誤。我想創建一個動態添加TableRows的表。在makeNewRow()的第二行,我得到一個NullPointerException。在其他問題中,我發現在初始化TableRow之前可能沒有設置ContentView,但我的onCreate方法正常工作。在手機上測試該應用時,我會在應用崩潰之前在屏幕上看到已經包含一行的TableLayout。 但是,我猜這是我的「這」的任何錯誤,但我迄今沒有找到任何幫助...NPE Android動態初始化TableRows
注意瞭解代碼:AsyncTask JSONDownload返回一個JSONArray並在其調用makeNewRow() postExecute() - 方法。 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);
}
}
的logcat的:
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){
table=new Tabelle();
table.showTable(jarray);
}
請正確格式化您的logcat併爲您的onPostExecute添加代碼。 – Simon