2015-10-26 5 views
-1

Я делаю приложение, которое необходимо отправить данные из android в базу данных. Я делаю это с помощью JSONParser. Но когда я запускаю приложение, у меня возникают проблемы, он не отправляет данные на сервер. Я получил и ошибку на «String name = inputName.getText(). ToString();». Вот он:Метод getText должен вызываться из потока ui

protected String doInBackground(String... args) { 
      String name = inputName.getText().toString(); 
      String date = inputDate.getText().toString(); 
      String time = inputTime.getText().toString(); 
      String latitude = inputLatitude.getText().toString(); 
      String longitude = inputLongitude.getText().toString(); 
      String contacts = inputContacts.getText().toString(); 

      // Building Parameters 
      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      params.add(new BasicNameValuePair("name", name)); 
      params.add(new BasicNameValuePair("date", date)); 
      params.add(new BasicNameValuePair("time", time)); 
      params.add(new BasicNameValuePair("latitude", latitude)); 
      params.add(new BasicNameValuePair("longitude", longitude)); 
      params.add(new BasicNameValuePair("contacts", contacts)); 

      // getting JSON Object 
      // Note that create product url accepts POST method 
      JSONObject json = jsonParser.makeHttpRequest(url_create_product, 
        "POST", params); 

      // check log cat fro response 
      Log.d("Create Response", json.toString()); 

      // check for success tag 
      try { 
       int success = json.getInt(TAG_SUCCESS); 

       if (success == 1) { 
        // successfully created product 
        Intent i = new Intent(getApplicationContext(), MainActivity.class); 
        startActivity(i); 

        // closing this screen 
        finish(); 
       } else { 
        // failed to create product 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 

     /** 
     * After completing background task Dismiss the progress dialog 
     * **/ 
     protected void onPostExecute(String file_url) { 
      // dismiss the dialog once done 
      pDialog.dismiss(); 
     } 

    } 

ответ

0

Как ошибка говорит вам, вы не можете назвать getText() в фоновом потоке. Вместо этого переместите свои шесть вызовов getText() в конструктор вашего AsyncTask или, возможно, в обратный вызов onPreExecute(), поэтому вызовы getText() выполняются в основной теме приложения.

+0

Или используйте 'Handler', который был создан в основном потоке, и из фонового потока вызывается метод' sendMessage' обработчика. – t0mm13b

+0

@ t0mm13b: Не изнутри 'doInBackground()' из 'AsyncTask'. Остальная часть 'doInBackground()' нуждается в данных перед продолжением. – CommonsWare

+0

У меня есть решение проблемы. Это ссылка [lhttp: //stackoverflow.com/questions/32011996 ....] (http://stackoverflow.com/questions/32011996/method-gettext-must-be-called-from-the-ui- токарно-андроид-студия? RQ = 1). Но он по-прежнему не отправляет данные на сервер. Независимо от того, связана ли ошибка с этим или какие-либо проблемы с несоответствием на сервере? –

Смежные вопросы