0

So i got the source code from here to test this out and i am not getting any output or response from the server like i'm supposed to. Does anyone know why this is happening? I have a feeling that in the second "try" something is not working and its going into the execption ex with nothing in it. Is this correct? Anyways please help me out in getting this to give me a response/output.

    public class HttpPostExample extends Activity {

  TextView content;
  EditText fname, email, login, pass;
  String Name, Email, Login, Pass; 

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_http_post_example);

      content    =   (TextView)findViewById( R.id.content );
      fname      =   (EditText)findViewById(R.id.name);
      email      =   (EditText)findViewById(R.id.email);
      login      =    (EditText)findViewById(R.id.loginname);
      pass       =   (EditText)findViewById(R.id.password);


      Button saveme=(Button)findViewById(R.id.save);

      saveme.setOnClickListener(new Button.OnClickListener(){

          public void onClick(View v)
          {
              try{

                       // CALL GetText method to make post method call
                      GetText();
               }
              catch(Exception ex)
               {
                  content.setText(" url exeption! " );
               }
          }
      });  
  }     
// Create GetText Metod
public  void  GetText()  throws  UnsupportedEncodingException
  {
      // Get user defined values
      Name = fname.getText().toString();
      Email   = email.getText().toString();
      Login   = login.getText().toString();
      Pass   = pass.getText().toString();

       // Create data variable for sent values to server  

        String data = URLEncoder.encode("name", "UTF-8") 
                     + "=" + URLEncoder.encode(Name, "UTF-8"); 

        data += "&" + URLEncoder.encode("email", "UTF-8") + "="
                    + URLEncoder.encode(Email, "UTF-8"); 

        data += "&" + URLEncoder.encode("user", "UTF-8") 
                    + "=" + URLEncoder.encode(Login, "UTF-8");

        data += "&" + URLEncoder.encode("pass", "UTF-8") 
                    + "=" + URLEncoder.encode(Pass, "UTF-8");

        String text = "";
        BufferedReader reader=null;

        // Send data 
      try
      { 

          // Defined URL  where to send data
          URL url = new URL("http://androidexample.com/media/webservice/httppost.php");

       // Send POST data request

        URLConnection conn = url.openConnection(); 
        conn.setDoOutput(true); 
        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
        wr.write( data ); 
        wr.flush(); 

        // Get the server response 

      reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
      StringBuilder sb = new StringBuilder();
      String line = null;

      // Read Server Response
      while((line = reader.readLine()) != null)
          {
                 // Append server response in string
                 sb.append(line + "\n");
          }


          text = sb.toString();
      }
      catch(Exception ex)
      {

      }
      finally
      {
          try
          {

              reader.close();
          }

          catch(Exception ex) {}
      }

      // Show response on activity
      content.setText( text  );

  }

}

EDIT: I just did some debugging and found out that i was right about thwere the problem is, its somewhere in here, anybody know where exactly?

     URL url = new URL("http://androidexample.com/media/webservice/httppost.php");

     // Send POST data request

      URLConnection conn = url.openConnection();
      conn.setDoOutput(true);
      OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
      wr.write( data );
      wr.flush();

      // Get the server response

    reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    StringBuilder sb = new StringBuilder();
    String line = null;

    // Read Server Response
    while((line = reader.readLine()) != null)
        {
               // Append server response in string
               sb.append(line + "\n");
        }


        text = sb.toString();

    }

1 Answers1

0

You're doing network I/O on the main (UI) thread. That is not allowed in Android.

You should move all that code into an AsyncTask. Remember, however, that you cannot change the UI from a background thread, so the part that shows the result must be executed in onPostExecute().

For example, change your GetText() method to return a string with the text instead of calling content.setText(), and your click listener into something like this:

public void onClick(View v)
{
    // Get user defined values
    Name = fname.getText().toString();
    Email = email.getText().toString();
    Login = login.getText().toString();
    Pass = pass.getText().toString();

    new AsyncTask<Void, Void, String>()
    {
         @Override
         public String doInBackground (Void... params)
         {
             return GetText();
         }

         @Override
         protected void onPostExecute(String result)
         {
             content.setText(result);
         }

    }.execute();
}
Community
  • 1
  • 1
matiash
  • 54,791
  • 16
  • 125
  • 154