2013-11-27 4 views
0

Я создал свою деятельность из своего json-файла.Как добавить текстовый просмотр программно из JSONArray

Теперь я пытаюсь поместить 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 расширяет активность {

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. Но я не знаю, как разместить мой текст в моем представлении.

Вот мой код:

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 Вызывает: at com.fchps.bya.json.JSONParser.classicSetLabel (JSONParser.java:89)

Строка 89 = TextView myTextView = новый TextView (classicView);

Так кто может объяснить мне, в чем моя ошибка. Я пытался в течение 1 недели, и он не работает, так что я пришел сюда, чтобы знать, если somoby может помочь мне пожалуйста :)

Я не могу добавить свой TextView на мой взгляд, с: `Почему:

classicView.setContentView(myTextView); 

не работает? У меня уже есть LinearLayout в моем classicview class.`

Спасибо :)

+0

метода 'classicSetLabel' внутри которой' activity' или это отдельный класс ? –

+0

classicSetLabel находится в моем классе JSONParser, внутри которого нет активности.Но мой ClassicView herite от Activity – Fcps

+0

«ClassicView», наследующий деятельность, никоим образом не поможет. Вам нужен контекст текущей работы или контекста приложения. Создание нового объекта _activity_ и его передача таким образом не будут работать –

ответ

0

Поскольку для создания View в классе java вам понадобится контекст активности. добавить еще один параметр контекста методы 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); 

     } 
} 

Переходит активность Контекст для getClassicViewWithId метода из деятельности с идентификатором:

ClassicView view = jParser.getClassicViewWithId(your_id,MainActivity.this); 
+0

Хорошо, но я не могу определить этот контекст, который вы заявляете? – Fcps

+0

@ user2871328: нет необходимости определять контекст, просто добавляйте параметры к обоим методам и передавайте их из Activity, используя 'MainActivity.this' то же, что и im, делая в ответ –

+0

@ ρяσѕρєяK Это будет нормально работать .. что происходит в следующей строке? 'classicView.addContentView (myTextView, params);' будет ли отображаться textView? –

0
TextView myTextView = new TextView(classicView); 

Вам нужно контекст деятельности здесь:

TextView myTextView = new TextView(YourActivityName.this); 

или

TextView myTextView = new TextView(getApplicationContext()); 
+0

Он не работает с getApplicationContext(). Когда я попробовал новый TextView (ClassicView.this). Он тоже не работает – Fcps

0

Если вы хотите добавьте TextView вертикально и динамически, затем попробуйте использовать ListView.

+0

Я хочу создать Object программно из моего json-файла. У меня есть вид. Теперь я попытался поместить элемент в свой вид. – Fcps

Смежные вопросы