Android отправляет PHP post и NetworkOnMainThreadException

#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. для второго вопроса