[英]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.