Android WaitingMainSignalCatherLoop线程对信号3 ANR作出反应
当我尝试解析json输出并在由片段组成的活动中显示输出时,应用程序没有响应。 随着输出的不断变化,我根据从响应中获得的小部件类型动态添加片段。” 片段可以是10-15。如stackoverflow上的一个答案所示,我将解析逻辑保留在一个单独的线程上,然后在ui线程上添加片段Android WaitingMainSignalCatherLoop线程对信号3 ANR作出反应,android,android-fragments,android-activity,java-threads,android-anr-dialog,Android,Android Fragments,Android Activity,Java Threads,Android Anr Dialog,当我尝试解析json输出并在由片段组成的活动中显示输出时,应用程序没有响应。 随着输出的不断变化,我根据从响应中获得的小部件类型动态添加片段。” 片段可以是10-15。如stackoverflow上的一个答案所示,我将解析逻辑保留在一个单独的线程上,然后在ui线程上添加片段 @Override protected void onPostExecute(String s) { progressBar.setVisibility(View.GONE);
@Override
protected void onPostExecute(String s) {
progressBar.setVisibility(View.GONE);
if (!s.equalsIgnoreCase("") && !s.equalsIgnoreCase("null")) {
fragment_container.setVisibility(View.VISIBLE);
network_error.setVisibility(View.GONE);
try {
JSONObject jsonObject = new JSONObject(s);
JSONArray widgetJsonArray = jsonObject.getJSONArray("widgets");
for (int i = 0; i < widgetJsonArray.length(); i++) {
JSONObject widgetObject = widgetJsonArray.getJSONObject(i);
String widget_type = widgetObject.getString("widget_type");
if (widget_type.equalsIgnoreCase("auto_product_deals")) {
processAutoProductDeals(widgetObject);
} else if (widget_type.equalsIgnoreCase("manual_product")) {
processManualProduct(widgetObject);
} else if (widget_type.equalsIgnoreCase("manual_list")) {
processManualList(widgetObject);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
network_error.setVisibility(View.VISIBLE);
}
}
private void processManualList(final JSONObject widgetObject) {
Thread thread = new Thread() {
@Override
public void run() {
try {
ArrayList<ManualListPojo> listManual = new ArrayList<>();
JSONObject dataObject = widgetObject.getJSONObject("data");
String title = dataObject.getString("title");
if (!title.equalsIgnoreCase("shop by brand") && !title.equalsIgnoreCase("shop by discount")) {
JSONArray dealsArray = dataObject.getJSONArray("deals");
for (int i = 0; i < dealsArray.length(); i++) {
ManualListPojo manualDealPojo = new ManualListPojo();
JSONObject manualObject = dealsArray.getJSONObject(i);
manualDealPojo.setTitle(manualObject.getString("title"));
manualDealPojo.setImage(manualObject.getString("image"));
manualDealPojo.setPrice_text(manualObject.getString("price_text"));
manualDealPojo.setValid_till(manualObject.getString("valid_till"));
manualDealPojo.setStore(manualObject.optString("store"));
JSONObject linkObject = manualObject.getJSONObject("link");
if (linkObject.has("category"))
manualDealPojo.setCategory(linkObject.getString("category"));
if (linkObject.has("comparables"))
manualDealPojo.setComparables(linkObject.getString("comparables"));
if (linkObject.has("url"))
manualDealPojo.setUrl(linkObject.getString("url"));
if (linkObject.has("filters")) {
JSONObject filtersObject = linkObject.getJSONObject("filters");
if (filtersObject.has("properties")) {
JSONArray properties = filtersObject.getJSONArray("properties");
ArrayList<String> propertiesArray = new ArrayList<>();
for (int j = 0; j < properties.length(); j++) {
propertiesArray.add(properties.getString(j));
}
manualDealPojo.setProperty(propertiesArray);
}
if (filtersObject.has("price")) {
JSONObject priceObject = filtersObject.optJSONObject("price");
manualDealPojo.setMin(priceObject.optString("min"));
manualDealPojo.setMax(priceObject.optString("max"));
}
manualDealPojo.setSort(filtersObject.optString("sort"));
}
listManual.add(manualDealPojo);
}
}
if (listManual.size() > 0) {
final Activity activity = (Activity) IndexActivity.this;
if (activity != null && !activity.isFinishing()) {
final FragmentManager fragmentManager = getFragmentManager();
final ManualListFragment hello = new ManualListFragment(listManual, title);
runOnUiThread(new Runnable() {
@Override
public void run() {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragment_container, hello, "Manual_List");
fragmentTransaction.commitAllowingStateLoss();
}
});
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
};
thread.start();
}
private void processManualProduct(final JSONObject widgetObject) {
Thread thread = new Thread() {
@Override
public void run() {
try {
ArrayList<ItemPojo> listItem = new ArrayList<>();
JSONObject dataObject = widgetObject.getJSONObject("data");
String title = dataObject.getString("title");
JSONArray jsonItemArray = dataObject.getJSONArray("items");
for (int i = 0; i < jsonItemArray.length(); i++) {
JSONObject itemObject = jsonItemArray.getJSONObject(i);
ItemPojo itemPojoObject = new ItemPojo();
itemPojoObject.setImage(itemObject.getString("image"));
itemPojoObject.setId(itemObject.getString("id"));
itemPojoObject.setFinal_price(itemObject.getString("final_price"));
if (itemObject.has("mrp")) {
itemPojoObject.setMrp(itemObject.getString("mrp"));
}
itemPojoObject.setPrice(itemObject.getString("price"));
itemPojoObject.setTitle(itemObject.getString("title"));
itemPojoObject.setRatings(itemObject.getString("ratings"));
itemPojoObject.setDiscount(itemObject.getString("discount"));
itemPojoObject.setAvg_rating(itemObject.getString("avg_rating"));
listItem.add(itemPojoObject);
}
final Activity activity = (Activity) IndexActivity.this;
if (activity != null && !activity.isFinishing()) {
final FragmentManager fragmentManager = getFragmentManager();
final ManualProductFragment hello = new ManualProductFragment(listItem, title);
runOnUiThread(new Runnable() {
@Override
public void run() {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragment_container, hello, "Manual_Product");
fragmentTransaction.commitAllowingStateLoss();
}
});
}
} catch (JSONException e) {
e.printStackTrace();
}
}
};
thread.start();
}
private void processAutoProductDeals(final JSONObject widgetObject) {
final Thread thread = new Thread() {
@Override
public void run() {
try {
ArrayList<DealPojo> listDeal = new ArrayList<>();
JSONObject dataObject = widgetObject.getJSONObject("data");
String title = dataObject.getString("title");
JSONArray dealsArray = dataObject.getJSONArray("deals");
for (int i = 0; i < dealsArray.length(); i++) {
JSONObject dealObject = dealsArray.getJSONObject(i);
DealPojo dealPojoObject = new DealPojo();
dealPojoObject.setStore(dealObject.getString("store"));
String url = dealObject.getString("url");
if (url.contains("sendtostore.php")) {
url.replace("sendtostore", "justswipe");
}
dealPojoObject.setUrl(url);
dealPojoObject.setId(dealObject.getString("id"));
dealPojoObject.setPrice(dealObject.getString("price"));
dealPojoObject.setMrp(dealObject.getString("mrp"));
dealPojoObject.setPrice_text(dealObject.getString("price_text"));
dealPojoObject.setTitle(dealObject.getString("title"));
dealPojoObject.setImage(dealObject.getString("image"));
listDeal.add(dealPojoObject);
}
final Activity activity = (Activity) IndexActivity.this;
if (activity != null && !activity.isFinishing()) {
final FragmentManager fragmentManager = getFragmentManager();
final AutoProductDeal hello = new AutoProductDeal(listDeal, title);
runOnUiThread(new Runnable() {
@Override
public void run() {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragment_container, hello, "Auto_Product");
fragmentTransaction.commitAllowingStateLoss();
}
});
}
} catch (JSONException e) {
e.printStackTrace();
}
}
};
thread.start();
}
@覆盖
受保护的void onPostExecute(字符串s){
progressBar.setVisibility(View.GONE);
如果(!s.equalsIgnoreCase(“”)&!s.equalsIgnoreCase(“null”)){
fragment_container.setVisibility(View.VISIBLE);
网络_错误。设置可见性(查看。消失);
试一试{
JSONObject JSONObject=新的JSONObject;
JSONArray-widgetJsonArray=jsonObject.getJSONArray(“小部件”);
对于(int i=0;i0){
最终活动活动=(活动)IndexActivity.this;
if(activity!=null&&!activity.isFinishing()){
final FragmentManager FragmentManager=getFragmentManager();
最终手册ListFragment hello=新手册ListFragment(listManual,标题);
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
FragmentTransaction FragmentTransaction=fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragment_容器,您好,“手动_列表”);
fragmentTransaction.commitAllowingStateLoss();
}
});
}
}
}捕获(JSONException e){
e、 printStackTrac