0

When I start my emulator after install the application it return me error log this is error they're return me

error opening trace file: No such file or directory (2)
1.Error in http connection android.os.NetworkOnMainThreadException
2.Error converting result java.lang.NullPointerException: lock == null
3.Error parsing data org.json.JSONException: End of input at character 0 

this is my code java

package com.example.locav;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

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.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class Locav extends Activity {
    TextView txt;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.accueil);
     txt=(TextView)findViewById(R.id.text1);
     txt.setText("Connexion...");
     txt.setText(getServerData(strURL)); 

    }
    public static final String strURL ="http://105.143.142.224/locav/consulte.php";
    private String getServerData(String returnString) {
        InputStream is = null;
        String result = "";
        // Envoyer la requête au script PHP.
        // Script PHP : $sql=mysql_query("select * from tblVille where Nom_ville like '".$_REQUEST['ville']."%'");
        // $_REQUEST['ville'] sera remplacé par L dans notre exemple.
        // Ce qui veut dire que la requête enverra les marques commençant par la lettre f
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("marque","f"));

        // Envoie de la commande http
        try{
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(strURL);
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();

        }catch(Exception e){
            Log.e("log_tag", "1.Error in http connection " + e.toString());
        }

        // Convertion de la requête en string
        try{
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            result=sb.toString();
        }catch(Exception e){
            Log.e("log_tag", "2.Error converting result " + e.toString());
        }
        // Parse les données JSON
        try{
            JSONArray jArray = new JSONArray(result);
            for(int i=0;i<jArray.length();i++){
                JSONObject json_data = jArray.getJSONObject(i);
                // Affichage ID_ville et Nom_ville dans le LogCat
                Log.i("log_tag","idReservation: "+json_data.getInt("idReservation")+
                        ", marque: "+json_data.getString("marque")
                );
                // Résultats de la requête
                returnString += "\n\t" + jArray.getJSONObject(i); 
            }
        }catch(JSONException e){
            Log.e("log_tag", "3.Error parsing data " + e.toString());
        }
        return returnString; 
    }
}

this code is completed with a manisfest and layout

Manifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.locav"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.INTERNET"/>


    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.locav.Locav"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

and my code php

<?php
  mysql_connect("localhost","root","");
  mysql_select_db("bdlocav");
  $sql=mysql_query("select * from tbreservation where marque like '".$_REQUEST['marque']."%'");
  while($row=mysql_fetch_assoc($sql))
  $output[]=$row;
  print(json_encode($output));
  mysql_close();
?>
telecom7
  • 11
  • 1
  • 4
  • 2
    [Is Google down today?](http://stackoverflow.com/search?q=NetworkOnMainThreadException). There is a `NetworkOnMainException` question at least once a day on here – codeMagic Feb 04 '14 at 01:27
  • telecom7 ..I am facing same problem...Can you please tell me how exactly you resolve problem by using Async ?? Pleasee...I am new to andoid so didnt getting idea how to use async.. – nick Mar 29 '16 at 10:17

1 Answers1

2

The Exception is really clearly, see the docs:

The exception that is thrown when an application attempts to perform a networking operation on its main thread.

So you are doing a network request on the MainThread. This happens because yo do this in the MainActivity, which is executed on the MainThread.

Simply use an AsyncTask or a BackgroundService for such things to get around this.

class DownloadTask extends AsyncTask<String, Void, String> {

    protected String doInBackground(String... urls) {
        //Put your getServerData-logic here
        //return serverData

    }
    //This Method is called when Network-Request finished
    protected void onPostExecute(String serverData) {
        textView.setText(serverData)
    }
}

In your Activity run the AsyncTask like this:

DownloadTask dlTask = new DownloadTask();
dlTask.execute()
Murmel
  • 5,402
  • 47
  • 53
  • how I must to change this code I don't know where because I'm newbie programmer – telecom7 Feb 04 '14 at 01:47
  • Have a look at this Blog: http://www.androiddesignpatterns.com/2012/06/app-force-close-honeycomb-ics.html There will be explained why it happens and at the bottom you can find further links for e.g. asynctask. – Murmel Feb 04 '14 at 11:36