2013-01-18 5 views
0

Cette question a probablement été posée beaucoup de fois .. Oui! Je fais face à ce que l'on appelle le "problème d'écran noir".
Ma première activité est celle où l'activité principale, dans laquelle la connexion est faite, et cette activité est suivie par la suivante qui est un rapport sommaire simple du compte de l'utilisateur.
Maintenant, pour ce rapport, je récupère l'ensemble de données, l'analyse et l'utilise pour construire la table dynamiquement. L'écran noir de villan apparaît ici !! Le rapport, comme dans le tableau, est rendu correctement, mais sur cet écran, cette couche tranluscente noire continue d'apparaître.
J'ai tout essayé, en utilisant des gestionnaires, asynctask, thème translucide mais rien n'y fait !! Le villan apparaît toujours quand mon rapport sommaire est chargé. Il disparaît si j'appuie sur le bouton "Retour", et l'écran semble normal, comme il devrait être quand il charge la première fois .. Je ne comprends pas ce qui ne va pas, que ce soit, mon approche de codage (dynamiquement générer la table) ou c'est un problème d'émulateur ou quoi.Se débarrasser de l'écran noir

My emulator details are as follows:
CPU:ARM
Target: Android 2.3.3
skin: WVGA800
sd card:1024M

Quelqu'un s'il vous plaît me sauver !!

EDIT:
Dans ma deuxième activité je fais ce qui suit:

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_summary_report); 
     ad = new AlertDialog.Builder(this).create(); 
     boolean is = IsConnectedToNetwork(); 
     if (is == true){ 
       Handler execWS = new Handler(); 
       execWS.post(callWS);//Fetch Data via web service and parse it 
       if(result != null){ 
        Handler genUI = new Handler(); 
        genUI.post(createUI);// generate the table based on "result". ie. in a for loop i create textviews and append it to the table layout 
       } 
      } 
     else{ 
      Error = "Connection Failed. Try Again!"; 
     } 
     if(Error.length() != 0){ 
     ad.setMessage(Error); 
     ad.setTitle("Error.."); 
      ad.show(); 
     } 
    } 

Ma mise en page de Xml pour la deuxième activité ..

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:baselineAligned="false" 
    android:gravity="center" 
    android:orientation="vertical"> 

    <TableLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="5dip"> 
      <ImageView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal" 
       android:contentDescription="@string/Logo" 
       android:src="@drawable/complogo" 
       android:gravity="top"/> 
      <TextView 
       android:id="@+id/lblLoginInfo" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" 
       android:gravity="center_horizontal"/> 
    </TableLayout> 


    <TableLayout 
     android:id="@+id/tblSummRep" 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:layout_weight="4" 
     android:padding="5dip"> 
    </TableLayout> 
    <TableLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:padding="5dip"> 

      <TextView 
       android:id="@+id/AppName" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:gravity="center" 
       android:text="@string/AppName" 
       android:textColor="#ff6600" /> 

      <TextView 
       android:id="@+id/AppVersion" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:gravity="center" 
       android:text="@string/AppVersion" 
       android:textColor="#ff6600" /> 

      <TextView 
       android:id="@+id/Disclaimer" 
         android:gravity="center" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="@string/Disclaimer"     
       android:textColor="#ff6600" /> 
    </TableLayout> 
</LinearLayout> 

j'ajouter le textview à "tblSummRep" ..

MISE À JOUR ma classe AsyncTask ..

private class ShareWork extends AsyncTask<Void, Void, Boolean>{ 
     ProgressDialog pDlg; 
     //String[][] result = null; 
     protected void onPreExecute(){ 
      pDlg.setMessage("Please wait while the Report Loads..."); 
      pDlg.show(); 
     } 

     @Override 
     protected Boolean doInBackground(Void... params) { 
      boolean RetVal = false; 
      //my fetch code 
      return RetVal; 
     } 


     protected void onPostExecute(Boolean value){ 
      if(value == true){ 
       pDlg.setMessage("Please try again later!!"); 
       pDlg.show(); 
      } 
      else{ 
       createUI.run(); 

      } 
     } 
    } 
+1

peut-on voir le code .. ?? ? – SilentKiller

+2

pouvez-vous également poster la capture d'écran? –

+1

Et pendant que vous y êtes, je vous suggère de reformater votre question. Comme c'est il est assez difficile de le lire et certaines personnes le passeront juste à cause de cela. – Audrius

Répondre

2

Je ne sais pas ce que vous faites référence par « problème d'écran noir », mais vous dites que vous récupérez des données (je suppose que depuis un serveur distant) et que cela arrive. Cela me semble à propos de bloquer le fil de l'interface utilisateur. Dans quelle méthode de l'activité récupérez-vous les données (peut-être dans le onCreate)? Vous ne devez pas effectuer d'actions fastidieuses sur le fil graphique, telles que l'interrogation d'un serveur distant (ce qui peut prendre quelques secondes). Dans ces cas, un AsyncTask doit toujours être utilisé. L'utilisateur devrait recevoir des commentaires sur ce qui se passe en arrière-plan, donc l'utilisation d'un ProgressBar est normalement recommandée (ou au moins un spinner).

Vous pouvez jeter un oeil à la façon de résoudre un problème similaire avec un AsyncTask here.

Mise à jour

Vous venez posté de votre code. Le problème réside (comme je l'ai supposé) dans cette ligne de code:

execWS.post(callWS);//Fetch Data via web service and parse it 

Je suppose qu'il s'agit d'un appel WS. Vous bloquez ici le fil de l'interface utilisateur. Créer une asyncTask de la même manière que celle du lien que j'ai fourni, et à la fin de la tâche exécuter le reste du code (erreur d'affichage ou la table dynamique avec les données).

Votre AsyncTask pourrait ressembler à ceci (je ne l'ai pas essayé):

private class LoadTableTask extends AsyncTask<URL, Integer, Object> { 
    protected Object doInBackground(URL... urls) { 
     Handler execWS = new Handler(); 
     execWS.post(urls[0]);//Fetch Data via web service and parse it 
     return result; 
    } 

    protected void onProgressUpdate(Integer... progress) { 
     //Not used in your case. It would be a good idea to create an undefined progress dialog in your case 
    } 

    protected void onPostExecute(Object result) { 
     if(result != null){ 
       Handler genUI = new Handler(); 
       genUI.post(createUI);// generate the table based on "result". ie. in a for loop i create textviews and append it to the table layout 
     } 

    } 
} 

Votre onCreate méthode() serait remplacé par:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_summary_report); 
    ad = new AlertDialog.Builder(this).create(); 
    boolean is = IsConnectedToNetwork(); 
    if (is == true){ 
      new LoadTableTask().execute(callWS); 
     } 
    else{ 
     Error = "Connection Failed. Try Again!"; 
    } 
    if(Error.length() != 0){ 
    ad.setMessage(Error); 
    ad.setTitle("Error.."); 
     ad.show(); 
    } 
} 
+0

Oui, je vais chercher le les données d'un serveur distant, je n'effectue pas la récupération sur le thread principal. J'ai également essayé d'utiliser la tâche asynchrone. Mais de toute façon je ne suis pas en mesure de se débarrasser de cette couche noire qui apparaît sur l'écran, que je me réfère comme le "problème d'écran noir" :) – Amruta

+0

Jetez un oeil à la mise à jour –

+0

Merci, je l'ai déjà essayé .. ma mise à jour .. j'ai ajouté la classe asynctask..qui a donné l'erreur de la source non trouvée .. et puis plus tard je suis passé à handler .. [here's] (http://stackoverflow.com/questions/14393800/source-not- found-on-asynctask-execute) cette question – Amruta