如何以编程方式从JSONArray添加textview

时间:2013-11-27 02:02:13

标签: java android json android-layout

我已经从我的json文件创建了我的Activity。

现在我尝试在我的新活动中放置TextView,但事实并非如此。

这是我的json文件:

"interface":{
"View":[
{
    "id":"0",
    "type":"Simple",
    "Label":[
        {
    "text":"bonjour comment ca va ?",
    "position_x":"200",
        "position_y":"400"
        },
        {
        "text":"coucou les amis",
        "position_x":"200",
        "position_y":"200"
        }
    ],

我的活动效果很好。

公共类ClassicView扩展了Activity {

public int myid;


public ClassicView() {

}
     public ClassicView(int id){
         super();
         myid = id;
     }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.linearlayout);

        LinearLayout ll = (LinearLayout) findViewById(R.id.linearlayout2);

        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( new ViewGroup.MarginLayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT));           
        setContentView(ll);
    }
}

我从json那里得到我的身份证。但我不知道如何将我的textview放在我的视图中。

这是我的代码:

public ClassicView getClassicViewWithId(int id) throws JSONException {
        JSONArray myView = myjsonobj.getJSONObject("interface").getJSONArray("View");           
        for (int i = 0; i < myView.length(); i++) {
            if (myView.getJSONObject(i).getInt("id") == id) {
                Log.e("IDVIEW", myView.getJSONObject(i).getString("id"));
                ClassicView myClassicView = new ClassicView(myView.getJSONObject(i).getInt("id"));

                classicSetLabel(myView.getJSONObject(i).getJSONArray("Label"), myClassicView);
                return myClassicView;
            }
        }
        return null;
    }

    public void classicSetLabel(JSONArray myArrayLabel, ClassicView classicView) throws JSONException {
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        params.gravity = Gravity.BOTTOM;

        Log.e("@@@@@WARNING TEXTLABEL :", "classicSetLabelErreur1");



        Log.e("@@@@@WARNING TEXTLABEL :", "classicSetLabelErreur2");
        for (int i = 0; i < myArrayLabel.length(); i++) {
            Log.e("CLASSICVIEW", classicView.toString());
            TextView myTextView = new TextView(classicView);
            myTextView.append(myArrayLabel.getJSONObject(i).getString("text"));
            classicView.addContentView(myTextView, params);
            Log.e("@@@@@WARNING TEXTLABEL :", myArrayLabel.getJSONObject(i).getString("text"));
        }

}

我的MainActivity.java:

public class MainActivity extends Activity {

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


    JSONParser jParser = null;
    try {
        jParser = new JSONParser("JsonTest.txt");
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    try {
        ClassicView view = jParser.getClassicViewWithId(0);
        //Log.e("idVIEWMAIN :", msg)
        Intent intent = new Intent(MainActivity.this, view.getClass());
        startActivity(intent);
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

当我尝试实现我的Textview时,我的LogCat说java.lang.NullPointerException 引起:com.fchps.bya.json.JSONParser.classicSetLabel(JSONParser.java:89)

第89行= TextView myTextView = new TextView(classicView);

那么谁可以向我解释我的错误是什么。我试了一个星期但它没有用,所以我来这里知道somoby是否可以帮助我。)

我不能将我的TextView添加到我的视图中:`Why:

classicView.setContentView(myTextView);

不起作用?我已经在我的经典视图类中拥有了我的LinearLayout。

谢谢:)

3 个答案:

答案 0 :(得分:0)

TextView myTextView = new TextView(classicView);

您需要此处的活动背景:

TextView myTextView = new TextView(YourActivityName.this);

TextView myTextView = new TextView(getApplicationContext());

答案 1 :(得分:0)

如果要垂直和动态添加TextView,请尝试使用ListView。

答案 2 :(得分:0)

因为要在java类中创建View,您需要Activity Context。将另一个上下文参数添加到getClassicViewWithId方法中:

public ClassicView getClassicViewWithId(int id,Context context) 
                                                throws JSONException {

     classicSetLabel(myView.getJSONObject(i).getJSONArray("Label"),
                                                myClassicView,context);
        return null;
  }

 public void classicSetLabel(JSONArray myArrayLabel, ClassicView classicView,
                                      Context context) throws JSONException {

        for (int i = 0; i < myArrayLabel.length(); i++) {
            Log.e("CLASSICVIEW", classicView.toString());
            TextView myTextView = new TextView(context);

        }
}

现在将活动上下文传递给来自具有id:

的Activity的getClassicViewWithId方法
ClassicView view = jParser.getClassicViewWithId(your_id,MainActivity.this);