Conrad
Conrad

Reputation: 953

Fail to display server's respond

Here I am trying to retrieve the response from the server and display it, but I am failed to do so, the response text does not appear in my text view, insetead the default value of the string does, may I ask how can I achieve my goal. And why my code cannot finish the task.

Here is my android program:

public class Chico extends Activity {

GrabURL grab;
TextView mRespond;
String line;

@Override
public void onCreate(Bundle savedInstanceState) {

    //create the activity
    super.onCreate(savedInstanceState);

    //set up the layout
    setContentView(R.layout.activity_chico);

    mRespond = (TextView) findViewById(R.id.Respond);
    mRespond.setVisibility(View.GONE);

    grab = new GrabURL();
      line = "line";

    //set up the button for check in
    Button btnin = (Button) findViewById(R.id.inbutton);
    btnin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            //set the values
            grab.onPreExecute("TechID", Build.SERIAL);
            grab.onPreExecute("Type", "Checkin");
            //set the destination and send the request
            grab.execute(new String[]{"http://192.168.1.150/Me/testing.php"});
            //close the activity
            mRespond.setVisibility(View.VISIBLE);
            mRespond.setText(line);
            //finish();
        }
    }); 
}

private class GrabURL extends AsyncTask<String, Void, Void>{
    //ArrayList object for storing the string pairs
    ArrayList<NameValuePair> nameValuePairs;

    public GrabURL() { 
        //constructor of the class
        nameValuePairs = new ArrayList<NameValuePair>(); 
      } 


    protected void onPreExecute(String key, String value) {
        //store the pair of values into the ArrayList 
        nameValuePairs.add(new BasicNameValuePair(key,value));
        }

    @Override
    protected Void doInBackground(String... urls) {
        // TODO Auto-generated method stub
        //Operation being executed in another thread
        try{
            //set up the type of HTTPClient
            HttpClient client = new DefaultHttpClient();
            //set up the location of the server
            HttpPost post = new HttpPost(urls[0]);
            //translate form of pairs to UrlEncodedFormEntity 
            UrlEncodedFormEntity ent = new UrlEncodedFormEntity(nameValuePairs,HTTP.UTF_8);
            //set up the entity being sent by post method
            post.setEntity(ent);
            //execute the url and post the values
            HttpResponse responsePOST = client.execute(post); 
            HttpEntity resEntity = responsePOST.getEntity();
            line = EntityUtils.toString(resEntity);
         } catch (Exception e) {
             //catch the exception
            line = "Can't connect to server";
         }
        return null;
    }

    protected void onPostExecute(Void unused) {
        Toast.makeText(getApplicationContext(), "Value updated", Toast.LENGTH_SHORT).show();
    }
    }

}

And here is the php file, it just prints a line:

<?php
print "testing";    
?>

Upvotes: 0

Views: 48

Answers (1)

user1521536
user1521536

Reputation:

Move this code to your AsyncTask's onPostExecute():

...
mRespond.setVisibility(View.VISIBLE);
mRespond.setText(line);

Upvotes: 1

Related Questions