2013-05-16 2 views
0

Voici le code JAVA de mon application:Mon application fonctionne très bien sur la version Android 2.3.3, mais ne fonctionne pas sur Android 4.2.2

public class Main extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    new GetUrl().execute(20); 

} 
private class GetUrl extends AsyncTask<Integer, Integer, BufferedReader> { 

    @Override 
    protected BufferedReader doInBackground(Integer... params) { 
     BufferedReader reader = null; 
     try { 
      URL url = null; 
      url = new URL("http://www.google.com"); 
      URLConnection conn = url.openConnection(); 
      reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

     } 
     catch (Exception e) { 
      TextView tv = (TextView) findViewById(R.id.textView1); 
      tv.setText("Error"); 
     } 
     return reader; 
    } 
    @Override 
    protected void onPostExecute(BufferedReader reader) { 
     TextView tv = (TextView) findViewById(R.id.textView1); 
     String line = null; 

     try { 
      line = reader.readLine().toString(); /*This line if removed removes the error. Whenever i try to work with the reader, it stops working for 4.2.2 but works fine for 2.3.3*/ 
      tv.setText(line); 


     } 
     catch(Exception e) { 
      tv.setText(e.getMessage()); 
     } 

    } 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

} 

Chaque fois que j'essaie de travailler avec le lecteur, il cesse de fonctionner pour 4.2.2 mais fonctionne bien pour 2.3.3. J'ai posté une question similaire auparavant et on m'a demandé de résoudre le problème en utilisant asyncTask, mais cela ne m'a pas vraiment aidé.

+0

Qu'est-ce que cela signifie «arrête de travailler»? Observez-vous une exception? – sandrstar

+0

Non, e.getMessage ne montre rien –

+0

@sandstar pouvez-vous venir à mon teamviewer et vérifier vous-même s'il vous plaît –

Répondre

0

Vous devez uniquement accéder au lecteur dans la méthode doInBackground, qui s'exécute sur un thread d'arrière-plan.

La méthode onPostExecute s'exécute sur le thread de l'interface utilisateur et ne doit mettre à jour que l'interface utilisateur.

Alors, je vous suggère de changer votre AsyncTask à

AsyncTask<Integer, Integer, String> 

déplacer la ligne

reader.readLine().toString(); 

à onPostExecute, retourne la chaîne de doInBackground et faire le paramètre à onPostExecute la chaîne que vous lis.

+0

Juste, juste essayé le code et ont observé 'android.os.NetworkOnMainThreadException' – sandrstar

Questions connexes