2012-11-04 27 views
3

我是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); 
} 
+0

請正確格式化您的logcat併爲您的onPostExecute添加代碼。 – Simon

回答

0

我看到你加入你的onPostExecute()方法和現在的錯誤是有道理的。您正試圖(錯誤地)創建新的活動,而不是使用現有活動。試試這個:

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

非常感謝!這解決了問題!現在,在你提到它之後,我突然明白了這一點。有時最簡單的事情會出錯...... – s23l