我有android.os.NetworkOnMainThreadException
的错误。我已经阅读了一些线程,为了避免这种情况,我们应该做AsyncTask。但是,我不知道如何为ButtonClick事件做这件事。以下是我的代码......
MainActivity.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事件的建议吗?我试过但失败了。谢谢。
答案 0 :(得分:2)
您正在主线程上进行网络操作,只需获取一个线程并在该线程的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();
}
}
希望这会对你有所帮助。
答案 1 :(得分:0)
这是正确的方法:
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
}
}
MainActivity.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();
}
});
}
}