2015-05-15 2 views
1

Я застрял на странице регистрации своего приложения. Я тестировал его на AVD, и он отлично работает, но следует отметить, что logcat сильно штурмуется системными журналами.Регистрация активности на телефонах

Сцена прямо сейчас, когда я тестирую свое приложение на телефоне, действие входа в систему работает нормально, но когда я перехожу на страницу регистрации, активность замерзает & У меня нет другого варианта, кроме принудительного закрытия или сам дождаться моего телефона. спросите меня, хочу ли я заставить его закрыть. Вот код моей страницы регистрации.

Название активность Enroll.java

package com.example.dell.iblood; 

import android.content.Intent; 
import android.os.Bundle; 
import android.os.StrictMode; 
import android.support.v7.app.ActionBarActivity; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Spinner; 
import android.widget.Toast; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
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 org.json.JSONArray; 
import org.json.JSONObject; 

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

public class enroll extends ActionBarActivity implements View.OnClickListener,AdapterView.OnItemSelectedListener { 
    EditText Name, Passwordone, Passwordtwo, Age, Address,Phone, Email; 
    Button REGISTER, RESET; 
    Spinner States,City,Bloodgroup; 

    String val = ""; 


    InputStream is = null; 

    String ip = "http://iblood.byethost3.com/spdemo.php"; 
    String line = null; 
    String result = null; 
    List<String> list,list1; 

    String name; 
    String paso; 
    String past; 
    String age; 
    String bgroup; 

    int code; 
    String add; 
    String state; 
    String city; 
    String phone; 
    String email; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_enroll); 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
     REGISTER = (Button) findViewById(R.id.Regbutton); 
     RESET = (Button) findViewById(R.id.Resbutton); 
     Name = (EditText) findViewById(R.id.nameU); 
     Passwordone = (EditText) findViewById(R.id.passUone); 
     Passwordtwo = (EditText) findViewById(R.id.passUtwo); 
     Age = (EditText) findViewById(R.id.ageU); 
     Bloodgroup = (Spinner) findViewById(R.id.bgroupU); 
     Address = (EditText) findViewById(R.id.addressU); 
     States = (Spinner) findViewById(R.id.stateU); 
     City = (Spinner) findViewById(R.id.cityU); 
     States = (Spinner) findViewById(R.id.stateU); 
     Phone = (EditText) findViewById(R.id.mobU); 
     Email = (EditText) findViewById(R.id.mailU); 

     Bloodgroup.setOnItemSelectedListener(this); 
     States.setOnItemSelectedListener(this); 
     City.setOnItemSelectedListener(this); 


     Selectall(); 
     ArrayAdapter<String> adp = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list); // set list into ArrayAdapter 
     States.setAdapter(adp); // Set 

     SelectBg(); 
     ArrayAdapter<String> adp3 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list); // set list into ArrayAdapter 
     Bloodgroup.setAdapter(adp3); // Set 

     REGISTER.setOnClickListener(this); 
     RESET.setOnClickListener(this); 



    } 


    @Override 
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
     val = States.getSelectedItem().toString(); 
     selectcity(); 
     ArrayAdapter<String> adp1 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list1); // set list into ArrayAdapter 
     City.setAdapter(adp1); 


    } 

    @Override 
    public void onNothingSelected(AdapterView<?> adapterView) { 

    } 

    private void Selectall() { 
     // TODO Auto-generated method stub 

     try { 
      HttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost(ip); 
      HttpResponse response = httpClient.execute(httpPost); 
      HttpEntity entity = response.getEntity(); 
      is = entity.getContent(); 
     } catch (Exception e) { 
      Log.e("Webservice 1", e.toString()); 
     } 
     try { 

      BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8); 
      StringBuilder sb = new StringBuilder(); 

      while ((line = reader.readLine()) != null) { 

       sb.append(line + "\n"); 
      } 

      is.close(); 
      result = sb.toString(); 
     } catch (Exception e) { 
      Log.e("Webservice 2", e.toString()); 
     } 
     try { 

      JSONArray ja = new JSONArray(result); 
      JSONObject jo = null; 

      list = new ArrayList<String>(); 

      for (int i = 0; i < ja.length(); i++) { 

       jo = ja.getJSONObject(i); 
       list.add(jo.getString("nameofstate")); 
      } 
     } catch (Exception e) { 
      Log.e("Webservice 3", e.toString()); 
     } 
    } 

    private void selectcity() 

    { 
     ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 

     nameValuePairs.add(new BasicNameValuePair("city",val)); 

     try 
     { 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost("http://iblood.byethost3.com/cities.php"); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
      HttpResponse response = httpclient.execute(httppost); 
      HttpEntity entity = response.getEntity(); 
      is = entity.getContent(); 
      Log.e("pass 1", "connection success "); 
     } 
     catch(Exception e) 
     { 
      Log.e("Fail 1", e.toString()); 
      Toast.makeText(getApplicationContext(), "Invalid IP Address", 
        Toast.LENGTH_LONG).show(); 
     } 

     try 
     { 
      BufferedReader reader = new BufferedReader 
        (new InputStreamReader(is,"iso-8859-1"),8); 
      StringBuilder sb = new StringBuilder(); 
      while ((line = reader.readLine()) != null) 
      { 
       sb.append(line + "\n"); 
      } 
      is.close(); 
      result = sb.toString(); 
      Log.e("pass 2", "connection success "); 
     } 
     catch(Exception e) 
     { 
      Log.e("Fail 2", e.toString()); 
     } 

     try { 

      JSONArray ja = new JSONArray(result); 
      JSONObject jo = null; 

      list1 = new ArrayList<String>(); 

      for (int i = 0; i < ja.length(); i++) { 

       jo = ja.getJSONObject(i); 
       list1.add(jo.getString("cityname")); 

      } 
     } catch (Exception e) { 
      Log.e("Webservice 13", e.toString()); 
     } 
    } 
    private void SelectBg() { 
     // TODO Auto-generated method stub 

     try { 
      HttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost("http://iblood.byethost3.com/bloodgroup.php"); 
      HttpResponse response = httpClient.execute(httpPost); 
      HttpEntity entity = response.getEntity(); 
      is = entity.getContent(); 
     } catch (Exception e) { 
      Log.e("Webservice 1", e.toString()); 
     } 
     try { 

      BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8); 
      StringBuilder sb = new StringBuilder(); 

      while ((line = reader.readLine()) != null) { 

       sb.append(line + "\n"); 
      } 

      is.close(); 
      result = sb.toString(); 
     } catch (Exception e) { 
      Log.e("Webservice 2", e.toString()); 
     } 
     try { 

      JSONArray ja = new JSONArray(result); 
      JSONObject jo = null; 

      list = new ArrayList<String>(); 

      for (int i = 0; i < ja.length(); i++) { 

       jo = ja.getJSONObject(i); 
       list.add(jo.getString("Bloodgroup")); 
      } 
     } catch (Exception e) { 
      Log.e("Webservice 3", e.toString()); 
     } 
    } 

    @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_enroll, 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); 
    } 

    @Override 
    public void onClick(View view) { 
     int i = view.getId(); 
     name = Name.getText().toString(); 
     paso = Passwordone.getText().toString(); 
     past = Passwordtwo.getText().toString(); 
     age = Age.getText().toString(); 
     bgroup=Bloodgroup.getSelectedItem().toString(); 
     add = Address.getText().toString(); 
     state= States.getSelectedItem().toString(); 
     city=City.getSelectedItem().toString(); 
     phone = Phone.getText().toString(); 
     email = Email.getText().toString(); 

     switch (i) { 
      case R.id.Regbutton: 
       insert(); 

       break; 

      case R.id.Resbutton: 
       Name.setText(" "); 
       Passwordone.setText(""); 
       Passwordtwo.setText(""); 
       Age.setText(" "); 
       Bloodgroup.setSelection(0); 
       Address.setText(" "); 
       States.setSelection(0); 
       City.setSelection(0); 
       Phone.setText(" "); 
       Email.setText(" "); 
       break; 
     } 

    } 

    public void insert() { 
     ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 


     nameValuePairs.add(new BasicNameValuePair("nameU", name)); 
     nameValuePairs.add(new BasicNameValuePair("passUone", paso)); 
     nameValuePairs.add(new BasicNameValuePair("passUtwo", past)); 
     nameValuePairs.add(new BasicNameValuePair("ageU", age)); 
     nameValuePairs.add(new BasicNameValuePair("bloodgroup",bgroup)); 

     nameValuePairs.add(new BasicNameValuePair("addressU", add)); 
     nameValuePairs.add(new BasicNameValuePair("nameofstate", state)); 
     nameValuePairs.add(new BasicNameValuePair("cityname", city)); 



     nameValuePairs.add(new BasicNameValuePair("mobU", phone)); 
     nameValuePairs.add(new BasicNameValuePair("mailU", email)); 

     try { 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost("http://iblood.byethost3.com/reg.php"); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
      HttpResponse response = httpclient.execute(httppost); 
      HttpEntity entity = response.getEntity(); 
      is = entity.getContent(); 
      Log.e("pass 11", "connection success "); 
     } catch (Exception e) { 
      Log.e("Fail 1", e.toString()); 
      Toast.makeText(getApplicationContext(), "Invalid IP Address"+e, 
        Toast.LENGTH_LONG).show(); 
     } 
     try { 
      BufferedReader reader = new BufferedReader 
        (new InputStreamReader(is, "iso-8859-1"), 8); 
      StringBuilder sb = new StringBuilder(); 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
      is.close(); 
      result = sb.toString(); 
      Log.e("pass 12", "connection success "); 
     } catch (Exception e) { 
      Log.e("Fail 2", e.toString()); 
     } 

     try 
     { 
      JSONObject json_data = new JSONObject(result); 
      code=(json_data.getInt("code")); 

      if (code == 1) { 
       Intent l = new Intent(this, Mainpage.class); 
       startActivity(l); 
       Toast.makeText(getBaseContext(), "Registered Successfully \n Please Login", 
         Toast.LENGTH_SHORT).show(); 
      } 
      else { 
       Intent la = new Intent(this, Mainpage.class); 
       startActivity(la); 
       Toast.makeText(getBaseContext(), "Sorry, Try Again", 
         Toast.LENGTH_LONG).show(); 
      } 
     } 
     catch (Exception e) { 
      Log.e("Fail 3", e.toString()); 
     } 

    } 

} 
+0

У меня такое чувство, что, поскольку вы не выполняете свои HTTP-запросы асинхронно, каждый раз, когда вы делаете запрос, вы блокируете поток пользовательского интерфейса, пока не получите ответ, и если ответ не вернется, re приложение не собирается отвечать. – TomRichardson

+0

Я совершенно новичок в android и испортил код, так как начал работать над этим приложением. Я мало знаю об этом, но имею представление о том, о чем вы говорите. Не могли бы вы рассказать, что вы пытаетесь сказать? Или было бы очень любезно сказать вам, где в коде проблема? –

ответ

0

Как отметил @TomRichardson вашей основной проблемой является то, что вы делаете трудоемких операций на UI потоке деятельности.

Как и в большинстве современных сред, «основной» поток вашей деятельности всегда должен быть доступен для обработки пользовательского ввода, что делает вашу программу отзывчивой. Если вы хотите сделать что-то много времени (например, сделать HTTP-запрос), вам нужно сделать это в другом фоновом потоке.

Обычно эта последовательность выглядит примерно так: 1. Поток пользовательского интерфейса всплывает, чтобы показать, что он работает и запускает цепочку задач. 2. Задание задачи работы и по завершению сигнализирует UIthread 3. Нить пользовательского интерфейса очищает счетчик хода и делает все, что ему нужно для следующего.

Если это все звучит немного сложно, попробуйте прочитать о классе ASyncTask от Android, который реализует большинство этих бит для вас простым и понятным способом.

ASyncTask имеет серьезные проблемы, и по мере того, как вы узнаете о развитии Android, вы можете оставить его, но это хорошее место, чтобы начать с такой задачи, как ваша.

+0

Большое вам спасибо! Я сделал это через AsyncTask, и приложение, похоже, работает нормально :) –

+0

Рад, что это сработало для вас - что-то нужно помнить о будущем: если вы запускаете несколько задач async, они запускаются один за другим в очереди, а не параллельно, как и следовало ожидать. – Elemental

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