У меня есть следующий класс Android, с которым я манипулирую просьбами POST в API REST Laravel, эта основана в HttpUrlConnection
:
import android.content.Context;
import android.net.DhcpInfo;
import android.net.wifi.WifiManager;
import android.util.Log;
import android.widget.TextView;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
public class Net {
private HttpURLConnection urlConnection;
public String requestString(String url, Map parameters) {
StringBuilder result = new StringBuilder();
try {
URL finalurl = new URL(url);
urlConnection = (HttpURLConnection) finalurl.openConnection();
urlConnection.setReadTimeout(10000);
urlConnection.setConnectTimeout(15000);
urlConnection.setRequestMethod("POST");
urlConnection.setDoInput(true);
if (parameters != null) {
urlConnection.setDoOutput(true);
writeOutput(urlConnection, (HashMap) parameters);
}
writeInput(urlConnection, result);
urlConnection.disconnect();
} catch (Exception e) {
System.out.println("Error" + e);
}
Log.i("httpResponse", result.toString());
return result.toString();
}
private void writeOutput(HttpURLConnection conn, HashMap postDataParams) throws IOException {
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(getPostDataString(postDataParams));
writer.flush();
writer.close();
os.close();
}
private void writeInput(HttpURLConnection conn, StringBuilder strb) throws IOException {
InputStream in = new BufferedInputStream(conn.getInputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = reader.readLine()) != null) {
strb.append(line);
}
}
private String getPostDataString(HashMap params) throws UnsupportedEncodingException {
StringBuilder result = new StringBuilder();
boolean first = true;
for (Map.Entry entry : params.entrySet()) {
if (first)
first = false;
else
result.append("&");
result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
}
return result.toString();
}
public static void logNetInformation(Context c) {
WifiManager wifii;
DhcpInfo d;
String s_dns1;
String s_dns2;
String s_gateway;
String s_ipAddress;
String s_leaseDuration;
String s_netmask;
String s_serverAddress;
TextView info;
wifii = (WifiManager) c.getSystemService(Context.WIFI_SERVICE);
d = wifii.getDhcpInfo();
s_dns1 = "DNS 1: " + String.valueOf(d.dns1);
s_dns2 = "DNS 2: " + String.valueOf(d.dns2);
s_gateway = "Default Gateway: " + String.valueOf(d.gateway);
s_ipAddress = "IP Address: " + String.valueOf(d.ipAddress);
s_leaseDuration = "Lease Time: " + String.valueOf(d.leaseDuration);
s_netmask = "Subnet Mask: " + String.valueOf(d.netmask);
s_serverAddress = "Server IP: " + String.valueOf(d.serverAddress);
Log.i("Network Info", s_dns1 + "\n" + s_dns2 + "\n" + s_gateway + "\n" + s_ipAddress + "\n" + s_leaseDuration + "\n" + s_netmask + "\n" + s_serverAddress);
}
static public String intToIp(int addr) {
return ((addr & 0xFF) + "." +
((addr >>>= 8) & 0xFF) + "." +
((addr >>>= 8) & 0xFF) + "." +
((addr >>>= 8) & 0xFF));
}
}
Но недавно услышьте Volley и я осведомлялся, каковыми были различия, более специально он: Я должен использовать Volley вместо HttpUrlConnection
чтобы манипулировать просьбами Http, из-за которых? Также мне хотелось бы знать, как осуществляется точно та же функциональность, которая поставляет код вверх, но в Volley.
Спасибо.
В одном из ответов укрепляется следующее:
Следует отметить, что volley эта в неупотребительности, из-за которого я понимаю, и сейчас использует HttpUrlConnection
Creo, что, когда мы утвердим вещи этого типа ser¦, - чтобы лучше документировать afirmaci¦n. Volley не estÃ: в неупотребительности, всем противоположности, она вынесена, документируется и рекомендуется Google, чтобы сделать просьбы прежде всего, если они не являются очень тяжелыми .
у Según Google, Volley есть серия совсем не презренных преимуществ, между ними:
, Хотя Volley обладает огромными преимуществами для обработки просьб, он не значит, что нужно использовать в каждом petici¦n, который мы сделали. Этот librer¦ - в tiene ограничения с разрядом слишком много пространного informaci¦n, так как Ваш operaci¦n основывается на пропусках в caché, что har¦ - в медленный процесс с объемными данными.
Мы Оценим простоту и ясность использования Volley:
Для заданий, поскольку получать json с Веб услуги Volley предлагает огромные возможности с небольшим количеством l¦-neas c¦digo.
Aquà - пример pÃ: gina Google для petici¦n JSON:
TextView mTxtDisplay;
ImageView mImageView;
mTxtDisplay = (TextView) findViewById(R.id.txtDisplay);
String url = "http://my-json-feed";
JsonObjectRequest jsObjRequest = new JsonObjectRequest
(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
mTxtDisplay.setText("Response: " + response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
}
});
// Access the RequestQueue through your singleton class.
MySingleton.getInstance(this).addToRequestQueue(jsObjRequest);
Помимо уже сказанного, Volley открывает широкий веер возможностей, когда мы она сочетаем с другими librer¦-туз, как GSON, для управления, полностью ориентируемого на объекты наших ответов JSON, полученных с Веб услуги.
, Если наш aplicaci¦n делает постоянное использование Интернета или нуждается в том, чтобы реализовать просьбы на протяжении всей Вашей активности и компонентов. Этот situaci¦n har¦, - которые много программистов признают очередями просьб из-за всех сторон, или даже происходить как parÃ: метр очередь между классами, что становится повторным, мало работоспособным и смущенным.
, Чтобы демонтировать этот сложный подход, с Volley Google предлагает возможность и рекомендует создавать Патран Синглтона, который герметизировал в корпусе бы необходимую функциональность Volley. Этот patr¦n характеризуется тем, что ограничивает достижение класса единственным объектом, а именно, одинокий может существовать единственный контролирующий объект, который представлял бы существование класса, ограничивая instanciaci¦n новых элементов.
С этим soluci¦n, singleton serÃ: вездесущий во всем проекте Android и podrÃ: n использовать функциональность в любом месте. BÃ: sicamente этот класс должен содержать как признак очередь просьб и контекст aplicaci¦n (глаз, не контекст активности, так как необходимо устанавливать независимость интерфейса, если в algún момент существует изменение configuraci¦n, как rotaci¦n экрана).
, Если наш aplicaci¦n делает пунктуальные связи в сеть не ser¦ - в необходимый осуществлять выражение patr¦n.
Шрифта:
доказательство с
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static final String REGISTER_URL = "http://estoesunserver.com/UserRegistration/volleyRegister.php";
public static final String KEY_USERNAME = "username";
public static final String KEY_PASSWORD = "password";
public static final String KEY_EMAIL = "email";
private EditText editTextUsername;
private EditText editTextEmail;
private EditText editTextPassword;
private Button buttonRegister;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editTextUsername = (EditText) findViewById(R.id.editTextUsername);
editTextPassword = (EditText) findViewById(R.id.editTextPassword);
editTextEmail= (EditText) findViewById(R.id.editTextEmail);
buttonRegister = (Button) findViewById(R.id.buttonRegister);
buttonRegister.setOnClickListener(this);
}
private void registerUser(){
final String username = editTextUsername.getText().toString().trim();
final String password = editTextPassword.getText().toString().trim();
final String email = editTextEmail.getText().toString().trim();
StringRequest stringRequest = new StringRequest(Request.Method.POST, REGISTER_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Toast.makeText(MainActivity.this,response,Toast.LENGTH_LONG).show();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this,error.toString(),Toast.LENGTH_LONG).show();
}
}){
@Override
protected Map<String,String> getParams(){
Map<String,String> params = new HashMap<String, String>();
params.put(KEY_USERNAME,username);
params.put(KEY_PASSWORD,password);
params.put(KEY_EMAIL, email);
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
@Override
public void onClick(View v) {
if(v == buttonRegister){
registerUser();
}
}
}
Следует отметить, что volley
эта в неупотребительности, из-за которого я понимаю, и сейчас используются HttpUrlConnection
типов привета
Ты это оставил Volley, который я использую, он cortito!
public void onClick(View v) {
RequestQueue cola = Volley.newRequestQueue(this);
String url = "TU URL";
final StringRequest stringRequest = new StringRequest
(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//Te devuelve el parametro response
// En este se encuentra todo lo que te devuelve
TextView.setText(response);
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
System.out.println("ERROR RESPONSE");
}
});
cola.add(stringRequest);}