Autore Topic: creazione di un dialog all'inserimento di un widget  (Letto 1279 volte)

Offline giupardeb

  • Utente junior
  • **
  • Post: 115
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Glaxy Note 4
creazione di un dialog all'inserimento di un widget
« il: 18 Marzo 2015, 13:23:01 CET »
0
Buon pomeriggio ragazzi volevo che nel momento in cui tappo il widget , vorrei che spuntasse un dialog, purtroppo mi da un errore. vi riporto il logcat:

Codice: [Seleziona]
03-18 13:15:06.709: D/AndroidRuntime(31580): Shutting down VM
03-18 13:15:06.709: W/dalvikvm(31580): threadid=1: thread exiting with uncaught exception (group=0x41892da0)
03-18 13:15:06.709: E/AndroidRuntime(31580): FATAL EXCEPTION: main
03-18 13:15:06.709: E/AndroidRuntime(31580): Process: com.ppesoft.switch3G4G, PID: 31580
03-18 13:15:06.709: E/AndroidRuntime(31580): java.lang.RuntimeException: Unable to start receiver com.ppesoft.switch3G4G.SwitchData: java.lang.NullPointerException
03-18 13:15:06.709: E/AndroidRuntime(31580):         at android.app.ActivityThread.handleReceiver(ActivityThread.java:2789)
03-18 13:15:06.709: E/AndroidRuntime(31580):         at android.app.ActivityThread.access$1800(ActivityThread.java:174)
03-18 13:15:06.709: E/AndroidRuntime(31580):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
03-18 13:15:06.709: E/AndroidRuntime(31580):         at android.os.Handler.dispatchMessage(Handler.java:102)
03-18 13:15:06.709: E/AndroidRuntime(31580):         at android.os.Looper.loop(Looper.java:146)
03-18 13:15:06.709: E/AndroidRuntime(31580):         at android.app.ActivityThread.main(ActivityThread.java:5748)
03-18 13:15:06.709: E/AndroidRuntime(31580):         at java.lang.reflect.Method.invokeNative(Native Method)
03-18 13:15:06.709: E/AndroidRuntime(31580):         at java.lang.reflect.Method.invoke(Method.java:515)
03-18 13:15:06.709: E/AndroidRuntime(31580):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
03-18 13:15:06.709: E/AndroidRuntime(31580):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
03-18 13:15:06.709: E/AndroidRuntime(31580):         at dalvik.system.NativeStart.main(Native Method)
03-18 13:15:06.709: E/AndroidRuntime(31580): Caused by: java.lang.NullPointerException
03-18 13:15:06.709: E/AndroidRuntime(31580):         at com.ppesoft.switch3G4G.MyDialog.<init>(MyDialog.java:22)
03-18 13:15:06.709: E/AndroidRuntime(31580):         at com.ppesoft.switch3G4G.SwitchData.onUpdate(SwitchData.java:22)
03-18 13:15:06.709: E/AndroidRuntime(31580):         at android.appwidget.AppWidgetProvider.onReceive(AppWidgetProvider.java:66)
03-18 13:15:06.709: E/AndroidRuntime(31580):         at com.ppesoft.switch3G4G.SwitchData.onReceive(SwitchData.java:36)
03-18 13:15:06.709: E/AndroidRuntime(31580):         at android.app.ActivityThread.handleReceiver(ActivityThread.java:2781)
03-18 13:15:06.709: E/AndroidRuntime(31580):         ... 10 more
03-18 13:15:10.919: I/Process(31580): Sending signal. PID: 31580 SIG: 9

e la parte di codice

Codice: [Seleziona]
public MyDialog(Context context) {
                super(context);
                // TODO Auto-generated constructor stub
                dialog.setContentView(R.layout.activity_mydialog);
                dialog.setTitle(Connectivity.getTypeNetwork(tel.getNetworkType()));
                dialog.setCancelable(true);
                contextDialog = context;
        }

dà errore alla prima istruzione del costruttore MyDialog..


Questa invece è la prima parte del layout myDialog dove vi sono vari radioButton:

Codice: [Seleziona]
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/ScrollView01"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:layout_marginBottom="3dp"
    android:background="#000"
    tools:context="com.ppesoft.switch3G4G.MyDialog" >

    <RadioGroup
        android:id="@+id/radioNetwork"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <RadioButton
            android:id="@+id/radiobtn_1xRTT"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            android:text="1xRTT" />
Spero di essere stato chiaro... e spero di risolvere questo NullPointException... :(

Grazie mille anticipatamente ;)

Offline barthouse

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S3
  • Sistema operativo:
    4.3.3
Re:creazione di un dialog all'inserimento di un widget
« Risposta #1 il: 22 Luglio 2015, 09:57:23 CEST »
0
Ciao,
per far apparire una dialog, visto che non si potrebbe, devi passare da una activity.
Se ti serve ti passo il pezzo di codice che uso io.

Grazie
Max

Offline giupardeb

  • Utente junior
  • **
  • Post: 115
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Glaxy Note 4
Re:creazione di un dialog all'inserimento di un widget
« Risposta #2 il: 22 Luglio 2015, 10:42:50 CEST »
0
Te ne sarei molto grato se mi passassi il pezzo di codice; )

Offline barthouse

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S3
  • Sistema operativo:
    4.3.3
Re:creazione di un dialog all'inserimento di un widget
« Risposta #3 il: 22 Luglio 2015, 13:23:15 CEST »
0
Ho cercato di simularla più o meno come viene fatta quella normale, oviamente funziona tutta con intent.
Se non capisci qualche cosa o hai bisogno di chiarimenti, scrivi pure.

Max

manifest:
Codice (XML): [Seleziona]
        <!-- Activity Widget Dialog -->
        <activity
           android:name=".widget.activity.DialogWidgetActivity"
           android:noHistory="true"
           android:excludeFromRecents="true"
           android:launchMode="singleInstance"
           android:screenOrientation="portrait"
           android:theme="@style/dialogWidgetTheme" >
        </activity>

classe DialogWidgetActivity:
Codice (Java): [Seleziona]
package iltuo;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;

import org.geckoengine.AppReport.R;

public class DialogWidgetActivity extends Activity {
    private Context contex = this;
    private String text;
    private String title;
    private int icon;

    private boolean btnPositive;
    private String labelBtnPositive;
    private Intent intentBtnPositive = null;

    private boolean btnNegative;
    private String labelBtnNegative;
    private Intent intentBtnNegative = null;

    private boolean btnNeutral;
    private String labelBtnNeutral;
    private Intent intentBtnNeutral = null;

    private static final int OK_CANCEL_DIALOG = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = getIntent();
        this.text = intent.getStringExtra("text");
        this.title = intent.getStringExtra("title");
        this.icon = intent.getIntExtra("icon", 0);
        this.btnPositive = intent.getBooleanExtra("btnPositive", false);
        if (this.btnPositive) {
            this.labelBtnPositive = intent.getStringExtra("labelBtnPositive");
            this.intentBtnPositive = intent.getParcelableExtra("intentBtnPositive");
        }
        this.btnNegative = intent.getBooleanExtra("btnNegative", false);
        if (this.btnNegative) {
            this.labelBtnNegative = intent.getStringExtra("labelBtnNegative");
            this.intentBtnNegative = intent.getParcelableExtra("intentBtnNegative");
        }
        this.btnNeutral = intent.getBooleanExtra("btnNeutral", false);
        if (this.btnNeutral) {
            this.labelBtnNeutral = intent.getStringExtra("labelBtnNeutral");
            this.intentBtnNeutral = intent.getParcelableExtra("intentBtnNeutral");
        }

        // display the dialog
        showDialog(OK_CANCEL_DIALOG);
    }

    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
            case OK_CANCEL_DIALOG:
                LayoutInflater factory = LayoutInflater.from(this);
                final View view = factory.inflate(R.layout.dialog_widget, null);

                TextView tv = (TextView) view.findViewById(R.id.txtWidgetAlert);
                if (tv != null)
                    tv.setText(text);
                AlertDialog.Builder alertDialog = new AlertDialog.Builder(DialogWidgetActivity.this);
                alertDialog.setCancelable(false);
                alertDialog.setTitle(title.toUpperCase());
                if (icon > 0)
                    alertDialog.setIcon(icon);
                alertDialog.setView(view);
                alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
                    @Override
                    public void onCancel(DialogInterface dialog) {
                        finish();
                    }
                });
                if (btnPositive) {
                    alertDialog.setPositiveButton(labelBtnPositive, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            if (intentBtnPositive != null) {
                                contex.startService(intentBtnPositive);
                            }
                            finish();
                        }
                    });
                }
                if (btnNeutral) {
                    alertDialog.setNeutralButton(labelBtnNeutral, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            if (intentBtnNeutral != null) {
                                contex.startService(intentBtnNeutral);
                            }
                            finish();
                        }
                    });
                }
                if (btnNegative) {
                    alertDialog.setNegativeButton(labelBtnNegative, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            if (intentBtnNegative != null) {
                                contex.startService(intentBtnNegative);
                            }
                            finish();
                        }
                    });
                }
                return alertDialog.create();
        }

        return null;
    }
}

La richiamo così:
Codice (Java): [Seleziona]
            viewErrorDialog(context);

            [...]

            private void viewErrorDialog(final Context context) {
                //intent da passare per annulla
                Intent iNoPass = new Intent(context, serviceClass);
                iNoPass.setAction(FinalWidgetVar.MANUAL_RESET_BUTTON);
                // dialog
                Intent intent = new Intent(context, DialogWidgetActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.putExtra("title", "Accesso non consentito");
                intent.putExtra("icon", R.drawable.ic_dialog_error);
                intent.putExtra("text", "Non sei autorizzato ad effettuare questa operazione.\n" +
                        "Per effettuare una operazione di badge devi essere connesso ad una rete autorizzata da xxxxx.");
                intent.putExtra("btnNegative", true);
                intent.putExtra("labelBtnNegative", "Chiudi");
                intent.putExtra("intentBtnNegative", iNoPass);
                context.startActivity(intent);
            }

Offline pixelpugs

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Htc Desire
  • Sistema operativo:
    Windows 8.1
Re:creazione di un dialog all'inserimento di un widget
« Risposta #4 il: 28 Luglio 2015, 04:33:21 CEST »
0
 :-o :-o :-o