Autore Topic: listView e alert dialog  (Letto 493 volte)

Offline stapeDev

  • Nuovo arrivato
  • *
  • Post: 1
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    Mac OS X 10.9.3
listView e alert dialog
« il: 20 Giugno 2014, 00:43:00 CEST »
0
Salve, ho un problema con un alert dialog. In pratica faccio partire un thread che chiama una funzione all'interno di questa funzione c'è un if in cui ci sta nel caso vero la chiamata ad un programma (e non da nessun problema se c'è il programma all'interno del dispositivo); nel caso falso faccio generare un alert dialog che mi permette di andare sul play store oppure di aprire una webview. Mi da problemi sul thread quando non ho il programma che mi serve sul dispositivo (pdf reader)
Codice: [Seleziona]
06-20 00:30:24.015: E/AndroidRuntime(1231): FATAL EXCEPTION: Thread-3480
06-20 00:30:24.015: E/AndroidRuntime(1231): Process: com.windrealm.android, PID: 1231
06-20 00:30:24.015: E/AndroidRuntime(1231): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
06-20 00:30:24.015: E/AndroidRuntime(1231):         at android.os.Handler.<init>(Handler.java:200)
06-20 00:30:24.015: E/AndroidRuntime(1231):         at android.os.Handler.<init>(Handler.java:114)
06-20 00:30:24.015: E/AndroidRuntime(1231):         at android.app.Dialog.<init>(Dialog.java:109)
06-20 00:30:24.015: E/AndroidRuntime(1231):         at android.app.AlertDialog.<init>(AlertDialog.java:114)
06-20 00:30:24.015: E/AndroidRuntime(1231):         at android.app.AlertDialog$Builder.create(AlertDialog.java:931)
06-20 00:30:24.015: E/AndroidRuntime(1231):         at android.app.AlertDialog$Builder.show(AlertDialog.java:950)
06-20 00:30:24.015: E/AndroidRuntime(1231):         at com.windrealm.android.SimpleListViewActivity$2$1.run(SimpleListViewActivity.java:222)
06-20 00:30:25.245: I/Process(1231): Sending signal. PID: 1231 SIG: 9

il metodo del thread che esegue è questo

Codice: [Seleziona]
PackageManager packageManager = getPackageManager();
      Intent testIntent = new Intent(Intent.ACTION_VIEW);
      testIntent.setType("application/pdf");
      List list = packageManager.queryIntentActivities(testIntent, PackageManager.MATCH_DEFAULT_ONLY);
      if(list.size()>0){
              String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
              File folder = new File(extStorageDirectory, "pdf");
              folder.mkdir();
              File file = new File(folder, "Read.pdf");
              try {
                      file.createNewFile();
              } catch (IOException e1) {
                  e1.printStackTrace();
              }
             
              downloader.DownloadFile(var, file);
              File file2 = new File(Environment.getExternalStorageDirectory()+"/pdf/Read.pdf");
              Intent intent = new Intent();
              intent.setAction(Intent.ACTION_VIEW);
              Uri uri = Uri.fromFile(file2);
              intent.setDataAndType(uri, "application/pdf");
              startActivity(intent);
      }else{
             
              new AlertDialog.Builder(SimpleListViewActivity.this)
              .setTitle("Applicazione non trovata")
              .setMessage("Vuoi scaricare un'applicazione che legge i pdf?")
              .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                  public void onClick(DialogInterface dialog, int which) {
                      // continue with delete
                          Intent intent = new Intent(Intent.ACTION_VIEW);
                          intent.setData(Uri.parse("market://details?id=com.quickoffice.android&hl=it"));
                          startActivity(intent);
                  }
               })
              .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
                  public void onClick(DialogInterface dialog, int which) {
                      // do nothing
                          setContentView(R.layout.web);
                          Toast toast=Toast.makeText(getApplicationContext(), "Per una visualizzazione migliore installare un PDF Reader", Toast.LENGTH_LONG);
                          toast.show();
                          WebView webview=(WebView) findViewById(R.id.webView);
                          webview.getSettings().setJavaScriptEnabled(true);
                    webview.setWebViewClient(new WebViewClient());
                          webview.loadUrl("http://docs.google.com/gview?embedded=true&url=" + var);
                  }
               }).show();
             
      }

Grazie in anticipo per l'aiuto

iClaude

  • Visitatore
Re:listView e alert dialog
« Risposta #1 il: 20 Giugno 2014, 11:09:03 CEST »
0
È perché cerchi di visualizzare la AlertDialog in un thread diverso da quello della GUI.
Se stai usando un AsyncTask metti quel codice in onPostExecute().