#php #android #post
#php #Android #Публикация
Вопрос:
Привет, у меня два вопроса:
1 Я хочу отправить сообщение php, например, с Android я отправляю:
URL url = new URL("mysite.php");
URLConnection con = url.openConnection();
con.setDoOutput(true);
PrintStream ps = new PrintStream(con.getOutputStream());
ps.print("user=user");
ps.print("amp;passw=pass");
ps.print("amp;value1"=" 1);
ps.print("amp;value2"=" 2);
con.getInputStream();
ps.close();
Теперь это mysite.php где я повторно получаю запрос post:
$user = $_POST['user'];
$password = $_POST['pass'];
$val1 = $_POST['value1'];
$val2 = $_POST['value2'];
$val3 = $_POST['value3'];
В коде Java у меня есть только send value1 и value2, но mysite.php требуется три переменные value1, value2 и value3, когда я отправлю запрос post без value3, в value3 что внутри? Значение 3 будет содержать нулевое значение, верно?
2 Я пытаюсь отправить post-запрос с Android, у меня есть класс create:
public class SendPostEGet extends AsyncTask<String, Void, String>{
private HashMap<String, String> lista_eventi;
public SendPostEGet(HashMap<String, String> lista_eventi){
this.lista_eventi = lista_eventi;
}
public void esegui(){
doInBackground("");
}
@Override
protected String doInBackground(String... strings) {
try{
URL url = new URL("http://mysite.php");
URLConnection con = url.openConnection();
con.setDoOutput(true);
PrintStream ps = new PrintStream(con.getOutputStream());
ps.print("user=user");
ps.print("amp;passw=passw");
Iterator<String> it = lista_eventi.keySet().iterator();
while (it.hasNext()){
String key = it.next();
if(lista_eventi.get(key).equals("true")){
ps.print("amp;" key "=" 1);
}else{
ps.print("amp;" key "=" 0);
}
}
con.getInputStream();
ps.close();
}catch (Exception e){
e.printStackTrace();
}
return null;
}
}
Но у меня есть исключение:
android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1166)
at java.net.InetAddress.lookupHostByName(InetAddress.java:418)
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
at java.net.InetAddress.getAllByName(InetAddress.java:215)
....
....
....
Почему у меня это исключение?
Комментарии:
1. Ответ от сервера: NetworkManagementSocketTagger: untagSocket(40)
Ответ №1:
Вы вызываете doInBackground() вручную. Таким образом, он выдаст исключение. Вызовите SendPostEGet.execute() вместо вызова doInBackground().
public void esegui(){
//doInBackground("");//remove this
SendPostEGet.execute()//add this
}
Комментарии:
1. что касается первого вопроса?
2. для второго вопроса