2015-06-13 18 views
-3

我有這個錯誤android.os.NetworkOnMainThreadException。我已閱讀了一些線程,以避免這種情況,我們應該做AsyncTask。但是,我不知道如何爲ButtonClick事件做到這一點。下面是我的代碼...android.os.NetworkOnMainThreadException - 對於按鈕點擊

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事件?我嘗試過但失敗。謝謝。

回答

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

哦謝謝你們!有效!! :) – Batman

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(); 
      } 
     }); 
    } 
} 
+0

但我看到你的個人資料加上一個爲你的笑話和你的ans :-) – mcd