android.os.NetworkOnMainThreadException - 对于按钮点击
android.os.NetworkOnMainThreadException - For Button Click
我有 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 事件的建议吗?我尝试过但失败了。谢谢。
正确的方法是:
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();
}
});
}
}
您正在主线程上进行网络操作,只需要一个线程并在该线程的 运行 方法中编写 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();
}
}
希望对您有所帮助。
我有 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 事件的建议吗?我尝试过但失败了。谢谢。
正确的方法是:
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();
}
});
}
}
您正在主线程上进行网络操作,只需要一个线程并在该线程的 运行 方法中编写 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();
}
}
希望对您有所帮助。