我想知道获取JSON并显示它的最佳做法是什么,从一个到活动(没有GUI)到另一个活动(使用GUI),我找到了几个方法,从只是传递jsonobject在PutExtra,创建一个Parcable类,然后将其作为PutExtraParacble传递。但我发现它不完整,因为获得一个json可以从1milisec到5整秒(将有samll和巨大的Jsons),所以当我使用parcable类方法,然后从我的MainActivity获取额外的时候,我可以得到一个空指针异常parcable类...... 这是重要的代码部分:
APIcontroller.getCardAPI("http://www.somesite.com/feeds/GetPlace", params);
Intent getJson = getIntent();
CardContent cardContent = (CardContent) getJson.getParcelableExtra("cardContent");
jsonArryCard = cardContent.getJsonArray();
然后在APIcontroller类中:
public void getCardAPI(String WSaddress,RequestParams params) {
AsyncHttpClient client = new AsyncHttpClient();
client.post(WSaddress,params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
try {
String respons = null;
try {
respons = responseBody == null ? null : new String(responseBody, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
JSONObject responseObject = new JSONObject(respons);
JSONArray resultsArray = responseObject.getJSONArray("places");
JSONObject taskObject = null;
for (int i = 0; i < resultsArray.length(); i++) {
// the JSON object in position i
taskObject = resultsArray.getJSONObject(i);
String temp = (String) taskObject.get("UserName");
Log.e("String test", temp);
}
CardContent cardContent = new CardContent(resultsArray);
Intent sendjson = new Intent(APIController.this, MainRegisterdActivity.class);
sendjson.putExtra("cardContent", (Parcelable) cardContent);
startActivity(sendjson);
MainRegisterdActivity.class);
Log.e("onSuccess", String.valueOf(taskObject));
} catch (JSONException e) {
e.printStackTrace();
}
}
我认为它是因为asyntask仍在运行所以当它进入下一个代码行时它有一个值..我应该只使用广播reciver还是有其他方法吗? 谢谢你的帮助
答案 0 :(得分:0)
你在想!我有同样的经历。在我看来,最好的方法是使用广播接收器。另一个不整洁的解决方案是将<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div class="m1 menu">
<div id="menu-center">
<ul>
<li><a class="active" href="#home">Home</a>
</li>
<li><a href="#resume">Resume</a>
</li>
<li><a href="#about">About</a>
</li>
<li><a href="#contact">Contact</a>
</li>
</ul>
</div>
</div>
<div id="home"></div>
<div id="resume"></div>
<div id="about"></div>
<div id="contact"></div>
函数从您的类中取出,并将其置于GUI的活动中,并将其余代码放在getCardAPI
函数中。因此,您确定已设置了值并且其余部分已设置代码将被执行,但不推荐!