Application android

Résolu/Fermé
roideseaux Messages postés 261 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 16 février 2023 - 3 déc. 2015 à 19:37
roideseaux Messages postés 261 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 16 février 2023 - 22 déc. 2015 à 18:50
Bonjour à tous.

Je vous pose mon problème :

J'ai récemment fait l'acquisition d'un raspberry (que j'ai installé sous raspbian) sur lequel j'ai installé un serveur. J'ai également des prise radio un petit peu partout dans mon appartement et je peux les contrôler avec mon raspberry grâce à une petite carte RF.

Je voudrai réussir à envoyer une requête à mon raspberry à partir de mon smartphone (ou tablette) via une petite application comme je le fais via mon serveur grâce à un petit site. Le souci, c'est que à partir de mon site, la requête envoyée est une commande system (vu que le serveur tourne sur le raspberry) donc je ne sais pas comment je pourrait faire envoyer la commande à partir d'une application android... ?

(Le lien utilisé pour exécuter l'action à partir du site est du type action.php?engine=id-17&action=CHANGE_STATE&code=3&state=on) et affiche donc une page. Je ne sais pas si il est possible d'exécuter l'action de ce lien sans afficher la page... ?)

Je précise que le java n'est pas mon fort, j'en comprend les bases mais je ne suis pas un as ^^

Pour le moment j'ai fait ça :
public class MainActivity extends AppCompatActivity {
 
    TextView txtMsg;
    Button btnNewMsg;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        txtMsg=(TextView)findViewById(R.id.txtMsg);
        btnNewMsg=(Button)findViewById(R.id.btnNewMsg);
 
        btnNewMsg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String retourDeLaPage = get("http://www.google.fr");
            }
        });
    }
 
    public static String get(String url) throws IOException {
 
        String source ="";
        URL oracle = new URL(url);
        URLConnection yc = oracle.openConnection();
        BufferedReader in = new BufferedReader(
                new InputStreamReader(
                        yc.getInputStream()));
        String inputLine;
 
        while ((inputLine = in.readLine()) != null)
            source +=inputLine;
        in.close();
        return source;
    }
}

Mais j'ai une erreur à la ligne
String retourDeLaPage = get("http://www.google.fr");

Et j'ai essayé avec try/catch mais ça fait planter l'application dès que l'action s’exécute...

Merci

9 réponses

BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 3 895
7 déc. 2015 à 13:49
Bonjour,

Quelle est l'erreur que tu reçois?
0
roideseaux Messages postés 261 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 16 février 2023 5
7 déc. 2015 à 22:31
Bonjour et merci de t'intéresser à mon problème !
L'erreur que j'ai est :
Error:(31, 44) error: unreported exception IOException; must be caught or declared to be thrown
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 3 895
8 déc. 2015 à 09:19
Le message est clair ;) Tu as une exception de type "IOException" que tu ne catche pas...
Rajoute le try/catch() et vérifies en pas-à-pas ce qui se passe.
0
roideseaux Messages postés 261 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 16 février 2023 5
Modifié par roideseaux le 8/12/2015 à 17:58
j'ai déjà essayé avec le try/catch je n'ai pas d'erreur de compilation mais à l’exécution, dès que le code est exécute (en cliquant sur mon bouton).
J’obtiens l'erreur :
12-08 16:53:55.696 3348-3348/biz.no_ip.littledodger.mamaison D/AndroidRuntime: Shutting down VM
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: FATAL EXCEPTION: main
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: Process: biz.no_ip.littledodger.mamaison, PID: 3348
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: android.os.NetworkOnMainThreadException
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at java.net.InetAddress.lookupHostByName(InetAddress.java:431)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at java.net.InetAddress.getAllByName(InetAddress.java:215)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:188)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:157)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:100)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:357)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:340)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:433)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:384)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:231)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at biz.no_ip.littledodger.mamaison.MainActivity.get(MainActivity.java:45)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at biz.no_ip.littledodger.mamaison.MainActivity$1.onClick(MainActivity.java:32)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at android.view.View.performClick(View.java:5198)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at android.view.View$PerformClick.run(View.java:21147)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:739)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at android.os.Looper.loop(Looper.java:148)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5417)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
12-08 16:53:55.697 3348-3348/biz.no_ip.littledodger.mamaison E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 3 895
9 déc. 2015 à 09:11
Le mot clé est ici
NetworkOnMainThreadException

Tu lances des requêtes réseau sur le thread UI, ce qu'il ne faut pas faire...
Regarde des briques comme OkHttpRequest par exemple.
0
roideseaux Messages postés 261 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 16 février 2023 5
12 déc. 2015 à 12:21
Je ne comprends pas ce que tu veux dire :/
0
roideseaux Messages postés 261 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 16 février 2023 5
19 déc. 2015 à 23:40
Personne ne peut m'aider ?
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 3 895
21 déc. 2015 à 09:37
Toujours pas résolu?
As-tu fait des recherches sur le type de l'exception que je t'ai indiquée ?
0
roideseaux Messages postés 261 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 16 février 2023 5
22 déc. 2015 à 18:50
Bonsoir, j'ai résolu mon problème en executant le code dans un thread différent avec

new thread ((runnable) () {
...
}).start();

merci :)
0