2013-09-09 7 views
0

У меня есть метод входа в LoginActivity, который вызывает методы класса AsyncTask.Невозможно создать экземпляр активности

Это методы, принимающие UserName И переход от SharedPrefrences Выполнение someQuery через SOAP webservice и возврат к reslut THE УчительID, если == 1 перейти Следующее действие.

Но только я открыл LoginActivity после экрана выплеска получаю эту ошибку LOG:

LOG ОШИБКА:

   FATAL EXCEPTION: main 
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.hesham.sams/com.hesham.sams.LoginActivity}: java.lang.NullPointerException 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2034) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 
     at android.app.ActivityThread.access$700(ActivityThread.java:140) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:4921) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
     at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NullPointerException 
     at android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:139) 
     at android.view.ContextThemeWrapper.getTheme(ContextThemeWrapper.java:65) 
     at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142) 
     at android.app.AlertDialog$Builder.<init>(AlertDialog.java:359) 
     at com.hesham.sams.LoginActivity.<init>(LoginActivity.java:79) 
     at java.lang.Class.newInstanceImpl(Native Method) 
     at java.lang.Class.newInstance(Class.java:1319) 
     at android.app.Instrumentation.newActivity(Instrumentation.java:1068) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2025) 
     ... 11 more 

LoginActivity:

loginBtn.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      ProgressDialog progressDialog = new ProgressDialog(
        LoginActivity.this); 
      progressDialog.setMessage("جاري تسجيل الدخول الرجاء الانتظار"); 
      progressDialog.show(); 

      AsyncTaskWebServiceCaller MyTask = new AsyncTaskWebServiceCaller(
        LoginActivity.this, progressDialog, 
        getApplicationContext()); 
      MyTask.execute(); 

     } 
    }); 

ПОЛНЫЙ AsnckTask Класс:

public class AsyncTaskWebServiceCaller extends AsyncTask<Void, Void, String> { 

Activity mActivity; 
Context context; 

// LoginActivity MyClass = new LoginActivity(); 
// public static Context contextOfApplication; 
ProgressDialog progressDialog; 

// Context applicationContext = LoginActivity.getContextOfApplication(); 

// Constractor 
public AsyncTaskWebServiceCaller(Activity activity, 
     ProgressDialog progressDialog, Context context) { 
    super(); 
    this.progressDialog = progressDialog; 
    this.mActivity = activity; 
    this.context = context; 
} 

// BackGround Process 
@Override 
protected String doInBackground(Void... voids) { 
    // this is executed in a background thread. 
    // the result is returned to the UI thread via onPostExecute 

    try { 
     final String NAMESPACE = "http://ws.sams.com"; 
     final String URL = "http://88.198.82.92:8080/sams1/services/LoginActvityWs?WSDL"; // usint 
                          // // 
                          // localhost 
     final String METHOD_NAME = "login"; 
     final String SOAP_ACTION = "http://ws.sams.com/login"; 
     final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
       SoapEnvelope.VER11); 
     final HttpTransportSE androidHttpTransport = new HttpTransportSE(
       URL); 

     SharedPreferences prefs = PreferenceManager 
       .getDefaultSharedPreferences(this.mActivity); 
     String user = prefs.getString("login", null); 
     String pass = prefs.getString("password", null); 
     // Calling Login Method 
     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

     // First Reques for USER NAME . 
     PropertyInfo pi = new PropertyInfo(); 
     pi.setName("username"); 
     pi.setValue(user); 
     pi.setType(String.class); 
     request.addProperty(pi); 

     // Second Reques for USER NAME . 
     PropertyInfo pi2 = new PropertyInfo(); 
     pi2.setName("password"); 
     pi2.setValue(pass); 
     pi2.setType(String.class); 
     request.addProperty(pi2); 

     // Getting Request Result , Will get TID . 
     envelope.setOutputSoapObject(request); 
     androidHttpTransport.call(SOAP_ACTION, envelope); 
     SoapPrimitive response = (SoapPrimitive) envelope.getResponse(); 

     return response.toString(); 

    } catch (XmlPullParserException e) { 

     return e.toString(); 

    } catch (IOException e) { 

     return e.toString(); 
    } 

    catch (NullPointerException e) { 

     return e.toString(); 

    } 

} 

@Override 
protected void onPostExecute(String result) { 

    Toast.makeText(mActivity.getApplicationContext(), result, 
      Toast.LENGTH_LONG).show(); 

    // If any error oceeared duaring get TID 
    if (result.equalsIgnoreCase("error")) { 
     final AlertDialog.Builder alertDialog = new AlertDialog.Builder(
       mActivity); 

     alertDialog.setTitle("يوجد مشكلة بالاتصال او السيرفر"); 
     alertDialog.setMessage("هل تود المحاولة مجددا ؟ "); 
     // Retry Button Action 
     alertDialog.setPositiveButton("نعم", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         AsyncTaskWebServiceCaller asynTask = new AsyncTaskWebServiceCaller(
           mActivity, progressDialog, mActivity 
             .getApplicationContext()); 
         asynTask.execute(); 
        } 
       }); 

     // No Button Action 
     alertDialog.setNegativeButton("لا", 
       new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         progressDialog.dismiss(); 
        } 
       }); 

     alertDialog.show(); 

    } 
    // IF pass or user Filed . 
    else if (Integer.parseInt(result.toString()) == 0) { 

     final AlertDialog.Builder alertDialog = new AlertDialog.Builder(
       mActivity); 

     alertDialog.setTitle("اسم المستخدم او كلمة المرور خاطئة"); 
     alertDialog.setMessage("هل تود اعادة تسجيل الدخول "); 

     alertDialog.setPositiveButton("نعم", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 

         progressDialog.dismiss(); 

        } 
       }); 
     alertDialog.setNegativeButton("لا", 
       new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         progressDialog.dismiss(); 
         Toast.makeText(mActivity.getApplicationContext(), 
           "thank you for using SAMS app", 
           Toast.LENGTH_LONG).show(); 
         mActivity.finish(); 
        } 
       }); 

     alertDialog.show(); 

    } 

    // For correct Login ! 
    else { 
     Toast.makeText(mActivity.getApplicationContext(), 
       result.toString(), Toast.LENGTH_LONG).show(); 
     progressDialog.dismiss(); 
     if (Integer.parseInt(result.toString()) == 1) { 

      Intent intent1 = new Intent(mActivity, DashBoard.class); 
      mActivity.startActivity(intent1); 

     } 
    } 

} 

}

+2

Посмотрите на свой лог-код, найдите местоположение NPE и выясните, какой нулевой объект вы пытаетесь получить. Затем исправьте его. – 323go

+0

Хорошо, что вы разместили свой код, но вам стоит подумать о публикации полной трассировки стека. Он расскажет вам (или сообществу SO), где именно ваш NPE брошен, что позволит вам отладить ваш код. – Mena

+0

все выше сказанное :)) и проверьте, что ваши новые параметры Intent не совпадают как null. –

ответ

3
Caused by: java.lang.NullPointerException 
    at android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:139) 
    at android.view.ContextThemeWrapper.getTheme(ContextThemeWrapper.java:65) 
    at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142) 
    at android.app.AlertDialog$Builder.<init>(AlertDialog.java:359) 
    at com.hesham.sams.LoginActivity.<init>(LoginActivity.java:79) 

Чтение снизу вверх. Ваша инициализация LoginActivity, инициализация конструктора или члена, создает экземпляр AlertDialog.Builder. Он принимает аргумент Context. Однако инициализация активности слишком рано на жизненном цикле, чтобы использовать объект активности как Context. Вам придется отложить свою инициализацию AlertDialog.Builder (и все остальное, что необходимо Context) до onCreate().

+0

да, я поставил его внутри на создание. Спасибо, мужик – hesham

0

Первый взгляд на ваши намерения. То, как вы открываете новую деятельность.

должно быть

Intent intent1 = new Intent(mActivity.this, DashBoard.class); 
     mActivity.startActivity(intent1); 
+0

это может быть или не быть проблемой coz индивидуально mActivity также будет работать – Trikaldarshi

+0

, но это может гарантировать работу – Trikaldarshi

+0

не работает я использовал >> Intent intent1 = new Intent (this.mActivity, DashBoard.class); – hesham

Смежные вопросы