2015-12-08 12 views
-2

我的代碼原來的線程是在這裏:活動拋出這個錯誤:只有創建視圖層次可以觸摸其觀點

public class Water_schedule extends Activity { 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() 
      .detectDiskReads().detectDiskWrites().detectNetwork() // StrictMode is most commonly used to catch accidental disk or network access on the application's main thread 
      .penaltyLog().build()); 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_water_schedule); 
     area = (Spinner)findViewById(R.id.spinner1); 
     submit = (Button) findViewById(R.id.btnsch); 
      tv = (TextView) findViewById(R.id.textSch); 
      submit.setOnClickListener(new OnClickListener() { 


         new Access_water().execute(); 
        } 
      }); 
    } 


    class Access_water extends AsyncTask<String , string ,string>{ 


     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(Water_schedule.this); 
      pDialog.setMessage("Loading please wait..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(false); 
      pDialog.show(); 
     } 

       @Override 
       protected string doInBackground(String... arg0) { 
        // TODO Auto-generated method stub 


         ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>(); 

         // define the parameter 
         postParameters.add(new BasicNameValuePair("area", 
        area.getSelectedItem().toString())); 
         String response = null; 

         // call executeHttpPost method passing necessary parameters 
         try { 
       response = CustomHttpClient.executeHttpPost(

        "http://pcmc.site11.com/water.php", 
        postParameters); 

       // store the result returned by PHP script that runs MySQL query 
       String result = response.toString(); 

        //parse json datasss 
        try{ 
          returnString = ""; 
         JSONArray jArray = new JSONArray(result); 
          for(int i=0;i<jArray.length();i++){ 
            JSONObject json_data = jArray.getJSONObject(i); 
            Log.i("log_tag","area: "+json_data.getString("area")+ 
              ",timing: "+json_data.getString("timing")+ 
               ",event: "+json_data.getString("event")+ 
              ",day: "+json_data.getString("day") 


            ); 
            //Get an output to the screen 
            returnString += "\nArea : " + json_data.getString("area") + 
              "\n____________________________\n Time : "+ json_data.getString("timing") + 
              "\n____________________________\nEvent : "+ json_data.getString("event")+ 
              "\n____________________________\nDay : "+ json_data.getString("day"); 
          } 
        } 
        catch(JSONException e){ 
          Log.e("log_tag", "Error parsing data "+e.toString()); 
        } 

        try{ 
         tv.setText(returnString); 
        } 
        catch(Exception e){ 
         Log.e("log_tag","Error in Display!" + e.toString());;   
        } 
       } 
         catch (Exception e) { 
       Log.e("log_tag","Error in http connection!!" + e.toString());  
       } 

        return null; 
       } 
       @Override 
        protected void onPostExecute(string result) { 
        super.onPostExecute(result); 
        pDialog.dismiss(); 
       } 

      } 





} 

我試圖同時從數據庫中提取數據使用進度對話框。數據庫代碼也在上面給出。

請讓我知道該怎麼做才能解決這個錯誤。

相同的代碼正在另一個活動上運行,沒有錯誤。

告訴我如何在多個活動中使用此進度對話框。

+0

首先,您需要正確設置代碼格式。這樣寫的時候真的很難閱讀。我也會回答這個問題,查看下面的答案。 – milosmns

回答

0

您需要發佈更多關於您的活動的詳細信息(例如,他們被宣佈爲單個實例,單個任務,單個頂級或正常/默認),例如..當從活動環境之外創建單個頂級或singleTask活動時,需要設置一個系統/ JVM任務來讓活動運行.Android會在首次調用您的活動時自動爲您執行此操作,但您必須手動爲活動目標添加一個標誌,以便爲隨後的或其他活動啓動器啓動該標誌。

除此之外,如果您在一項活動中創建了視圖,並且您進入了另一項任務,並且創建了另一個UI線程,該線程也試圖訪問相同的視圖(該視圖是在另一個UI線程上創建的),您將獲得這是你發佈的一個例外。

Android初學者遇到的更常見問題是從後臺線程訪問UI元素,但如果您在另一個活動中正確運行相同的代碼,我不認爲這是這種情況。所以基本上,檢查你的活動聲明,意圖標誌,並在其他活動(或上下文)中再次實例化對話框。希望這可以幫助。

Android線程:http://developer.android.com/guide/components/processes-and-threads.html

相關問題