【问题标题】:Not getting an output like im supposed to [closed]没有得到像我应该的输出[关闭]
【发布时间】:2014-06-15 08:34:51
【问题描述】:

所以我从here 获得了源代码来测试它,但我没有像我应该的那样从服务器获得任何输出或响应。有谁知道为什么会这样?我有一种感觉,在第二次“尝试”中,有些东西不起作用,它进入了执行前,里面什么都没有。这个对吗?无论如何,请帮助我得到这个给我一个响应/输出。

    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  );

  }

}

编辑:我刚刚做了一些调试,发现我是对的,问题出在哪里,它在这里的某个地方,有人知道确切的位置吗?

     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();

    }

【问题讨论】:

标签: java php android html post


【解决方案1】:

您正在主 (UI) 线程上执行网络 I/O。那是not allowed in Android。

您应该将所有代码移至AsyncTask。但是请记住,您不能从后台线程更改 UI,因此显示结果的部分必须在 onPostExecute() 中执行。

例如,将您的GetText() 方法更改为返回一个带有文本的字符串,而不是调用content.setText(),并将您的点击监听器更改为如下内容:

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();
}

【讨论】:

  • 好吧我试试这个谢谢:)
  • 通过GetView()方法是指GetText()吗?
  • 是的,getText()。对不起。
  • 你能给我一个 GetText() 应该是什么的例子吗?
  • nvm 让它工作了,谢谢 :))))
猜你喜欢
  • 2015-05-16
  • 2014-03-24
  • 1970-01-01
  • 2021-08-05
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多