繁体   English   中英

android.os.NetworkOnMainThreadException - 对于按钮点击

[英]android.os.NetworkOnMainThreadException - For Button Click

我有android.os.NetworkOnMainThreadException这个错误。 我已经阅读了一些线程,为了避免这种情况,我们应该执行 AsyncTask。 但是,我不知道如何处理 ButtonClick 事件。 下面是我的代码...

主活动.java:

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button test = (Button) findViewById(R.id.testbutton);

        test.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                try {
                    DynamoDBClient dbClient = new DynamoDBClient();

                    dbClient.DynamoDB();
                    dbClient.createTable();

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

你们能给我一个建议如何将 AsyncTask 用于 ButtonClick 事件吗? 我尝试过但失败了。 谢谢你。

您正在主线程上进行网络操作,只需在该线程的 run 方法中编写一个线程并编写onClick()代码,然后在onClick( ) 中启动该线程,如下所示

Thread t=new Thread(){
    public void run(){
        try
        {
            DynamoDBClient dbClient = new DynamoDBClient();

            dbClient.DynamoDB();
            dbClient.createTable();


        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

并在 OnClick()

test.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick (View view)
        {
           t.start();
        }
      }

希望这会帮助你。

这是正确的方法:

public class DoYoreWork extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... params) {

        try {
            DynamoDBClient dbClient = new DynamoDBClient();
            dbClient.DynamoDB();
            dbClient.createTable();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;

    }

    protected void onPostExecute(String page) {
        // onPostExecute
    }
}

主活动.java

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button test = (Button) findViewById(R.id.testbutton);
        test.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DoYoreWork obj = new DoYoreWork();
                obj.execute();
            }
        });
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM