2016-04-24 9 views
0

Я пытаюсь создать приложение для Android с вставкой информации , но я получаю эту ошибку «метод gettext должен вызываться из нити ui» и я получаю красные линии под editTextName.getText() и под editTextAdd.getText() это мой код, как я могу это исправить, объясните мне, с подробной информацией, пожалуйста, спасибо за помощьМетод android studio «inserting app» метод gettext должен вызываться из потока ui

import android.os.AsyncTask; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.UnsupportedEncodingException; 
import java.util.ArrayList; 
import java.util.List; 

public class Inserting extends ActionBarActivity { 

    private EditText editTextName; 
    private EditText editTextAdd; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.inserting); 

     editTextName = (EditText) findViewById(R.id.editTextName); 
     editTextAdd = (EditText) findViewById(R.id.editTextAddress); 


    } 

    public void insert(View view){ 
     String name = editTextName.getText().toString(); 
     String add = editTextAdd.getText().toString(); 

     insertToDatabase(name,add); 
    } 

    private void insertToDatabase(String name, String add){ 
     class SendPostReqAsyncTask extends AsyncTask<String, Void, String> { 
      @Override 
      protected String doInBackground(String... params) { 
       String paramUsername = params[0]; 
       String paramAddress = params[1]; 


       String name = editTextName.getText().toString(); 
       String add = editTextAdd.getText().toString(); 

       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
       nameValuePairs.add(new BasicNameValuePair("name", name)); 
       nameValuePairs.add(new BasicNameValuePair("address", add)); 

       try { 
        HttpClient httpClient = new DefaultHttpClient(); 
        HttpPost httpPost = new HttpPost(
          "http://192.168.215.14/insert-db.php"); 
        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

        HttpResponse response = httpClient.execute(httpPost); 

        HttpEntity entity = response.getEntity(); 


       } catch (ClientProtocolException e) { 

       } catch (IOException e) { 

       } 
       return "success"; 
      } 

      @Override 
      protected void onPostExecute(String result) { 

       super.onPostExecute(result); 

       Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG).show(); 
       TextView textViewResult = (TextView) findViewById(R.id.textViewResult); 
       textViewResult.setText("Inserted"); 
      } 
     } 
     SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask(); 
     sendPostReqAsyncTask.execute(name, add); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 
+0

Ну, тогда вам нужно запустить 'gettext' в потоке пользовательского интерфейса. Используйте свою любимую поисковую систему на терминах 'android' и' run on UI thread' - вы найдете ответы на kajillion. – m02ph3u5

+0

Возможный дубликат [Что такое Android UiThread (поток пользовательского интерфейса)] (http://stackoverflow.com/questions/3652560/what-is-the-android-uithread-ui-thread) – m02ph3u5

+1

Также подкласс класса AppCompatActivity в ваших действиях – Eenvincible

ответ

0
... 
private void insertToDatabase(String n, String a){ 
    final String name = editTextName.getText().toString(); 
    final String add = editTextAdd.getText().toString(); 
    class SendPostReqAsyncTask extends AsyncTask<String, Void, String> { 
     @Override 
     protected String doInBackground(String... params) { 
      String paramUsername = params[0]; 
      String paramAddress = params[1]; 

      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
... 
+0

вы имеете в виду, что мне просто нужно изменить этот раздел моего кода с разделом u напишите? 'частная пустота insertToDatabase (имя String, String добавить) { класс SendPostReqAsyncTask расширяет AsyncTask { @Override защищенные строки doInBackground (String ... PARAMS) { Строка paramUsername = PARAMS [0]; Строка paramAddress = params [1]; Строка name = editTextName.getText(). ToString(); String add = editTextAdd.getText(). ToString(); Список nameValuePairs = new ArrayList (); ' – mh9

+0

' Вы имеете в виду, что мне просто нужно изменить этот раздел моего кода на раздел u write? 'Yes. Однако я не могу прочитать код в вашем комментарии. – F43nd1r

+0

ok меняю его, но = (теперь у меня есть красные строки под именем и добавьте в эту строку кода: 'final String name = editTextName.getText(). ToString();' – mh9

0

не относятся к виджетам внутри doInBackground() , Переходите к значениям, которые вы получаете от этих EditText виджетов, либо к конструктору на вашем SendPostReqAsyncTask, либо как дополнительные строки для вашего звонка execute().

+0

спасибо за ур ответ тоже – mh9

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