http запрос и http ответ в андроиде? - PullRequest
0 голосов
/ 29 февраля 2012

Я работаю с:

org.apache.http.HttpResponse;
org.apache.http.client.HttpClient;
org.apache.http.client.methods.HttpGet;
org.apache.http.impl.client.DefaultHttpClient;

Я использую jsp для написания кода на стороне сервера.

Мне неизвестна процедура отправки некоторого значения на сервер из моего эмулятора. и получить значение o строку из ответа сервера.

Я хочу сказать ... какие методы использовать? Как их использовать .?

Ответы [ 2 ]

1 голос
/ 08 ноября 2012

Ниже приведен код, который я реализовал для отправки имени пользователя и пароля с Android на страницу JSP на стороне сервера.Ответ от сервера - это объект json, который затем обрабатывается. Код приведен ниже.

import java.util.ArrayList;
import java.util.List;

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.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;


public class Login_Menu extends Activity {

EditText usname;
EditText pass;
TextView tv;
HttpClient client;
HttpPost post;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login_lay);
 tv=(TextView) findViewById(R.id.login_stat_tv);
 usname=(EditText)findViewById(R.id.uname);
 pass=(EditText)findViewById(R.id.pass);
Button login=(Button)findViewById(R.id.login_but);
Button cancel=(Button)findViewById(R.id.cancel_but);

client = new DefaultHttpClient();
String url="http://10.0.2.2:7001/proj/login.jsp";
post = new HttpPost(url);
login.setOnClickListener(new View.OnClickListener() {

    public void onClick(View arg0) {
        new login().execute("");
    }
});

cancel.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {
        usname.getText().clear();
        pass.getText().clear();
    }
});

}




private class login extends AsyncTask<String, Void, JSONObject>{

ProgressDialog dialog = ProgressDialog.show(Login_Menu.this, "", "Authenticating, Please wait...");

@Override
protected JSONObject doInBackground(String... params) {
    Log.i("thread", "Doing Something...");
   //authentication operation
try{

    List<NameValuePair> pairs = new ArrayList<NameValuePair>();   
    pairs.add(new BasicNameValuePair("username",usname.getText().toString()));   
    pairs.add(new BasicNameValuePair("password",pass.getText().toString()));   
    post.setEntity(new UrlEncodedFormEntity(pairs));   
    HttpResponse response = client.execute(post);
    int status=response.getStatusLine().getStatusCode();

    if(status == 200)
    {
        HttpEntity e=response.getEntity();
        String data=EntityUtils.toString(e);
        JSONObject last=new JSONObject(data);
        return last;

    }

}

  catch(Exception e)
{
    e.printStackTrace();   

}

    return null;
}

protected void onPreExecute(){
    //dialog.dismiss();
    Log.i("thread", "Started...");
    dialog.show();
}
protected void onPostExecute(JSONObject result){
    Log.i("thread", "Done...");
    String status;
    String name;
    try {
        status= result.getString("status");
        name=result.getString("uname");

       if(dialog!=null)
       {
         dialog.dismiss();
       }
       else{}

     if(status.equalsIgnoreCase("yes"))
          {
        tv.setText("Login Successful...");

        Bundle newbundle=new Bundle();
        newbundle.putString("uname",name);

        Intent myIntent=new Intent(Login_Menu.this,Instruction.class);
        myIntent.putExtras(newbundle);

        startActivity(myIntent);

        }
      else{

            tv.setText("No User Found, please try again!");
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
   }

  }

 }
1 голос
/ 29 февраля 2012

Чтобы отправить запрос HTTP GET и получить ответ:

private static void get(final Context context, final String url) {
    new Thread() {
        @Override
        public void run() {
            HttpClient client = new DefaultHttpClient();
            HttpGet request = Utils.createHttpRequest(context, url, true, false);
            setProxyIfNecessary(context, request);
            try {
                HttpResponse response = client.execute(request);
                Log.v("Test", "StatusCode: " + response.getStatusLine().getStatusCode() + ", Entity: " + EntityUtils.toString(response.getEntity()));
            } catch (Exception e) {
                // Oh, crash
            }
        }
    }.start();
}

private static void setProxyIfNecessary(Context context, HttpUriRequest request) {
    ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = connectivity == null ? null : connectivity.getActiveNetworkInfo();
    if (networkInfo == null || networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
        return;
    }

    String proxyHost = Proxy.getHost(context);
    if (proxyHost == null) {
        return;
    }

    int proxyPort = Proxy.getPort(context);
    if (proxyPort < 0) {
        return;
    }

    HttpHost proxy = new HttpHost(proxyHost, proxyPort);
    ConnRouteParams.setDefaultProxy(request.getParams(), proxy);
}

Позвоните по:

get(context, "http://developer.android.com/index.html");

И вы получите лог по logcat *:S Test:V

Обратите внимание, что новый поток не должен блокировать поток пользовательского интерфейса

...