【问题标题】:'No network' Toast not displayed in onCreate'无网络' Toast 未显示在 onCreate 中
【发布时间】:2012-11-09 14:39:34
【问题描述】:

大家好,希望能帮到你。

我已经构建了一个填充 ListView 的 RSS 阅读器。我想在应用启动时检查用户是否有网络访问权限,如果没有网络,那么用户应该看到 setEmptyView 视图和 toast。

在 onCreate 中,我为列表适配器设置了一个空列表,因此我希望看到空视图。然后我查询网络状态,如果没有网络,我创建一个 toast。但是我从来没有在启动时看到空视图,当我没有网络时我从来没有看到吐司。怎么回事?

public class XMLActivity extends ListActivity {

private List<JSONObject> jobs = new ArrayList<JSONObject>();
private RssListAdapter adapter;
private ListView lv;


public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

//SET LAYOUT WITH EMPTY LIST VIEW 
    setContentView(R.layout.main);
    View empty = findViewById(R.id.empty);
    lv = getListView();               //get view layout
    lv.setEmptyView(empty);                   //set empty view
    adapter = new RssListAdapter(this,jobs);  //jobs is empty array list
    setListAdapter(adapter);

//CHECK FOR NETWORK AND DISPLAY TOAST
    try{
        boolean network = RssReader.isOnline(this); //check network state
        if (!network){
            Toast toast = Toast.makeText(XMLActivity.this, "No Network Access", Toast.LENGTH_LONG);
            toast.show();
        }
    }catch (Exception e){
            Toast toast = Toast.makeText(XMLActivity.this, "No Network Access", Toast.LENGTH_LONG);
            toast.show();
    }

// START RSS READER HANDLER
    try {
        jobs = RssReader.getLatestRssFeed();

    } catch (Exception e) {

    }
 //REFRESH ADAPTER FOR LISTVIEW
    adapter.clear();
    for(JSONObject job :jobs){
        adapter.add(job);
    }
    adapter.notifyDataSetChanged();
             lv.setClickable(true);

为什么我看不到空视图或 toast,这个问题只发生在 onCreate 例程中。稍后的 toasts 和空视图在菜单项选择上显示良好,因此这似乎是特定于 onCreate 序列的问题。

【问题讨论】:

  • 在哪里创建 toast 对象?
  • 使用 Toast.makeText(this, "No Network", 3000).show();
  • 用新的 Toast 方法更新了代码,但仍然没有显示 toast。
  • 用新的 Toast 方法更新了代码,但仍然没有显示 toast。似乎视图没有初始化,当我没有网络时,我只是黑屏,但我的空视图是白色的。
  • 我添加了一些日志记录代码来尝试缩小范围。它表明在没有网络期间运行了正确的 toast 代码,但是我没有看到任何 toast。我发现实际上,如果在 notifydatasetchanged() 之后调用它,即当列表视图不为空时,我只会看到一个 toast。为什么??为什么我的空视图此时没有显示??

标签: android android-layout listview handler toast


【解决方案1】:

试试Toast.makeToast(this, "msg to user", Toast.TOAST_MSG_SHORT).show(); 我确定我有一个错字,因为我的开发机器还没有启动和运行。

【讨论】:

  • 使用 Toast.LENGTH_LONG 或 Toast.LENGTH_SHORT 作为持续时间常数
【解决方案2】:

使用:

Toast.makeText(XMLActivity.this , "No Network", Toast.LENGTH_LONG).show();

【讨论】:

  • 如果没有得到任何toast,请尝试在代码中调试并添加soe日志以验证您的程序是否检测到网络是否在线,
【解决方案3】:
if (!network){    
  Toast toast = new Toast(getApplicationContext());
  toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
  toast.setDuration(Toast.LENGTH_LONG);
  TextView txt1 =  new TextView(this);
  txt1.setText("No Network");
  toast.setView(txt1);
  toast.show();
}
else ...

试试这个..,,.

【讨论】:

    【解决方案4】:

    您有一个未涵盖的情况 - 如果 network == true 会发生什么?

     try{
            boolean network = RssReader.isOnline(this); //check network state
            if (!network){
                Toast toast = Toast.makeText(XMLActivity.this, "No Network Access", Toast.LENGTH_LONG);
                toast.show();
            }
            else {
                Toast toast = Toast.makeText(XMLActivity.this, "Network Access!", Toast.LENGTH_LONG);
                toast.show();
            }
        }catch (Exception e){
                Toast toast = Toast.makeText(XMLActivity.this, "No Network Access", Toast.LENGTH_LONG);
                toast.show();
        }
    

    【讨论】:

      猜你喜欢
      • 2020-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      • 2013-12-01
      相关资源
      最近更新 更多