我已经从我的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。
谢谢:)
答案 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);