1

Je suis débutant dans le développement Android, je reçois erreur dans le code suivant. J'appelle la méthode d'asyn pour la demande de HTTP, avant que je vérifie Wifi ou le réseau mobile est disponible ou pas. Lorsque la connexion Internet est disponible Mon service fonctionne bien, mais en mode hors ligne I ma obtenir ce type d'erreur: « java.lang.RuntimeException: Une erreur est survenue lors de l'exécution doInBackground() »Comment résoudre une erreur java.lang.RuntimeException lors de l'exécution de doInBackground()?

04-09 19:44:33.057: E/AndroidRuntime(3127): FATAL EXCEPTION: AsyncTask #1 
04-09 19:44:33.057: E/AndroidRuntime(3127): java.lang.RuntimeException: An error  occured while executing doInBackground() 
04-09 19:44:33.057: E/AndroidRuntime(3127):  at android.os.AsyncTask$3.done(AsyncTask.java:278) 
04-09 19:44:33.057: E/AndroidRuntime(3127):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
04-09 19:44:33.057: E/AndroidRuntime(3127):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
04-09 19:44:33.057: E/AndroidRuntime(3127):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
04-09 19:44:33.057: E/AndroidRuntime(3127):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
04-09 19:44:33.057: E/AndroidRuntime(3127):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
04-09 19:44:33.057: E/AndroidRuntime(3127):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
04-09 19:44:33.057: E/AndroidRuntime(3127):  at java.lang.Thread.run(Thread.java:856) 
04-09 19:44:33.057: E/AndroidRuntime(3127): Caused by: java.lang.NullPointerException 
04-09 19:44:33.057: E/AndroidRuntime(3127):  at com.zoomi_zdc.SERVICES.MyServiceProf$myPostData.doInBackground(MyServiceProf.java:129) 
04-09 19:44:33.057: E/AndroidRuntime(3127):  at com.zoomi_zdc.SERVICES.MyServiceProf$myPostData.doInBackground(MyServiceProf.java:1) 
04-09 19:44:33.057: E/AndroidRuntime(3127):  at android.os.AsyncTask$2.call(AsyncTask.java:264) 
04-09 19:44:33.057: E/AndroidRuntime(3127):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 

Ci-dessous est Code MyServiceProfile. Dans ce premier code Je vérifie la connectivité Internet et aftr tht Si l'utilisateur est hors-ligne, les données enregistrées dans la base de données locale et lors d'une connexion Internet Mise à jour automatique sur notre serveur

public class MyServiceProf extends Service { 
Timer t = new Timer(); 
public TimerTask mTimerTask; 
private ConnectivityManager connectivityManager; 
final Handler handler = new Handler(); 
private int nCounter = 0; 
Context context = this; 

@Override 
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return null; 
} 

public void onCreate() { 


} 

@Override 
public void onStart(Intent intent, int startId) { 
    // TODO Auto-generated method stub 
    mTimerTask = new TimerTask() { 
     public void run() { 
      handler.post(new Runnable() { 
       public void run() { 
        nCounter++; 
        connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 

    final android.net.NetworkInfo wifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

    final android.net.NetworkInfo mobile = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

    if (wifi.isAvailable()) { 

     mTimerTask.cancel(); 

     try{ 
     new myPostData().execute(); 
     }catch (Exception e) { 
      // TODO: handle exception 
     } 

    } else if (mobile.isAvailable()) { 

     mTimerTask.cancel(); 
     try{ 

      new myPostData().execute(); 

     }catch (Exception e) { 
       // TODO: handle exception 
     } 

    } else { 

    // Toast.makeText(getBaseContext(),"You are trying to access online content but Internet Connection has been disconnected!!!",Toast.LENGTH_SHORT).show(); 

    } 

     } 
    }); 

    Log.d("TIMER", "TimerTask run"); 
     } 
    }; 

    // public void schedule (TimerTask task, long delay, long period) 
    t.schedule(mTimerTask, 0, 10000); // 

} 

@Override 
public void onDestroy() { 
    // TODO Auto-generated method stub 
    try { 
     t.cancel(); 

     handler.removeCallbacks(mTimerTask); 

    } catch (Exception e) { 
     // TODO: handle exception 
    } 


// Toast.makeText(getApplicationContext(), " Stopped", Toast.LENGTH_SHORT).show(); 
} 

public class myPostData extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 

     HttpProfilePost proupdate = new HttpProfilePost(); 

     String mMyprofileImagename[] = DatabaseHalper.mStudentImgNm.get(0).split("/"); 

     File sdcardPathofprofileimg = new File(Environment.getExternalStorageDirectory()+"/data/.System/MProfile/" +mMyprofileImagename[1]); 

     Bitmap mBitmapimageofMyProfilepic = BitmapFactory.decodeFile(sdcardPathofprofileimg.getAbsolutePath()); 

     DatabaseHalper dbhelper = new DatabaseHalper(getBaseContext()); 
     dbhelper.Get_ZoomiProfile_Data(); 

     proupdate.HttpClient_Profile_Post(context,DatabaseHalper.mStudentRollNo.get(0), 
       DatabaseHalper.mStudentName.get(0), 
       DatabaseHalper.mStudentAddress.get(0), 
       DatabaseHalper.mStudentEmrg_Person.get(0), 
       DatabaseHalper.mStudentEmrg_No.get(0), 
       DatabaseHalper.mStudentEmail.get(0), 
       DatabaseHalper.mStudentBloodGrp.get(0), 
       DatabaseHalper.mStudentMobileno.get(0), 
       mBitmapimageofMyProfilepic); 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
    } 
} 

}

Ma mise à jour sur le code de lien Http serveur est ci-dessous:

public class HttpProfilePost { 
private JSONObject jsonResponse; 
private Bitmap myPic; 
private ByteArrayOutputStream bos; 
private byte[] data; 
/*private ByteArrayBody bab; 
private MultipartEntity reqEntity;*/ 
private InputStream is; 
private SharedPreferences mPref; 
private SharedPreferences.Editor mEditor; 
private Context mContext; 
private HttpResponse httpResp; 
List<String> a; 
private String image1,image2,image3,image4,image5,image6,image7,image8,image9,image10; 

//private String WEBSERVICE_NAME = "Profile_post.aspx"; 

public JSONObject HttpClient_Profile_Post(Context c,String stud_rollno, String stud_name,String stud_address, String stud_emrgperson, String stud_emrgcontact, String stud_email, String stud_bloodgrp, String stud_mobileno, Bitmap myPhoto){ 

    mContext=c; 
    mPref = PreferenceManager.getDefaultSharedPreferences(mContext); 

    HttpClient httpClient = new DefaultHttpClient(); 

    String mStudentUserid= mPref.getString("Userid", ""); 
    String myImage[] = DatabaseHalper.mStudentImgNm.get(0).split("/"); 
    String profileimagepath = myImage[0]; 

    stud_name = URLEncoder.encode(stud_name); 
    stud_address = URLEncoder.encode(stud_address); 
    stud_emrgperson = URLEncoder.encode(stud_emrgperson); 
    stud_emrgcontact = URLEncoder.encode(stud_emrgcontact); 
    stud_email = URLEncoder.encode(stud_email); 
    stud_bloodgrp = URLEncoder.encode(stud_bloodgrp); 


// HttpPost mURL = new HttpPost("http://10.160.0.18:86/Service.svc/testpersondatapost?uid="+mStudentUserid+"&stdname="+stud_name+"&stdmail="+stud_email+"&Add="+stud_address+"&Qual=xyz&Qual_add=abc&pro_expert=abc&achieve=abc&Cont_no="+stud_mobileno+"&othr1=abc&othr2=abc&othr3=abc&proimgpath="+profileimagepath+"&UT=Student&Emer_ContPer="+stud_emrgperson+"&Emer_Cont_no="+stud_emrgcontact+"&Bld_Grp="+stud_bloodgrp+"&Addi_Notes"+; 
    String mURL = "http://webservice.zoomi.in/Service.svc/testpersondatapost?uid="+mStudentUserid+"&stdname="+stud_name+"&stdmail="+stud_email+"&Add="+stud_address+"&Qual=xyz&Qual_add=abc&pro_expert=abc&achieve=abc&Cont_no="+stud_mobileno+"&othr1=abc&othr2=abc&othr3=abc&proimgpath="+profileimagepath+"&UT=Student&Emer_ContPer="+stud_emrgperson+"&Emer_Cont_no="+stud_emrgcontact+"&Bld_Grp="+stud_bloodgrp+"&Addi_Notes=abc"; 

// String mURL = "http://webservice.zoomi.in/Service.svc/testpersondatapost?uid="+mStudentUserid+"&stdname="+stud_name+"&stdmail="+stud_email+"&Add="+stud_address+"&Qual=xyz&Qual_add=abc&pro_expert=abc&achieve=abc&Cont_no="+stud_mobileno+"&othr1=abc&othr2=abc&othr3=abc&proimgpath="+profileimagepath+"&UT=Student&Emer_ContPer="+stud_emrgperson+"&Emer_Cont_no="+stud_emrgcontact+"&Bld_Grp="+stud_bloodgrp+""; 
// String mURL = "http://10.160.0.18:86/Service.svc/testpersondatapost?uid="+mStudentUserid+"&stdname="+stud_name+"&stdmail="+stud_email+"&Add="+stud_address+"&Qual=xyz&Qual_add=abc&pro_expert=abc&achieve=abc&Cont_no="+stud_mobileno+"&othr1=abc&othr2=abc&othr3=abc&proimgpath="+profileimagepath+"&UT=Student&Emer_ContPer="+stud_emrgperson+"&Emer_Cont_no="+stud_emrgcontact+"&Bld_Grp="+stud_bloodgrp+""; 


    HttpPost postrequest = new HttpPost(mURL); 

    MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 


     FileBody fileBody = new FileBody(new File(Environment.getExternalStorageDirectory()+"/data/.System/MProfile/", myImage[1]));// ,"application/octet-stream"); 
     reqEntity.addPart("fileContents", fileBody); 

     try { 
      postrequest.setEntity(reqEntity); 

      // Execute the request "POST" 
      httpResp = httpClient.execute(postrequest); 

      /*HttpResponse response = null;*/ 
      // Check the status code, in this case "created" 

      //Log.v("App", "Created"); 

      int code = httpResp.getStatusLine().getStatusCode(); 

      System.out.println("Response Code : "+code); 
      /*if (((HttpResponse) response).getStatusLine().getStatusCode() == HttpStatus.SC_CREATED) 
      { 

      }*/ 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    int responcecode = httpResp.getStatusLine().getStatusCode(); 
    if(responcecode==200) 
    { 
     Intent stopserviceintnet = new Intent(mContext,MyServiceProf.class); 
     mContext.stopService(stopserviceintnet); 
     System.out.print("Your service is stopped..."); 
     try{ 

      MyclassFragment.mbtn_SaveMyProfile.setEnabled(true); 
     } 
     catch (Exception e) { 
     // TODO: handle exception 
     } 
     try{ 

      QuickaccessFragment.mbtn_SaveMyProfile.setEnabled(true); 
     } 
     catch (Exception e) { 
     // TODO: handle exception 
     } 

    }else 
    { 
     System.out.print("Your service is running..."); 
    } 
    System.out.println(jsonResponse); 


    return jsonResponse; 
} 

}

Parfois, il fonctionne correctement, mais tout à coup mes applications a été Crashed en wifi ou mobile Internet rappro On est connecté, je pense qu'à ce moment le service ne fonctionnait pas correctement. :( En attente de votre suggestion, solution et vos idées. Thanx.

+3

quelle ligne est causée par: java.lang.NullPointerException 9/4 19: 44: 33,057: E/AndroidRuntime (3127): à com.zoomi_zdc.SERVICES.MyServiceProf $ myPostData.doInBackground (MyServiceProf.java:129) – Nermeen

+1

postant la question avec NullPointerException devrait être banni sur SO ... – Selvin

+0

Il montre sur "doInBackground" méthode proupdate.HttpClient_Profile_Post (contexte, DatabaseHalper.mStudentRollNo.get (0), – CKnDROID

Répondre

1
04-09 19:44:33.057: E/AndroidRuntime(3127): Caused by: java.lang.NullPointerException 
04-09 19:44:33.057: E/AndroidRuntime(3127):  at com.zoomi_zdc.SERVICES.MyServiceProf$myPostData.doInBackground(MyServiceProf.java:129) 

selon ces 2 lignes que vous avez un pointeur NULL à la ligne 129 de votre code.

Aller à cette ligne, chèque ce qui est fait, trouver l'objet qui est nul et le fixer. C'est le débogage 101.

+0

Je n'ai pas compris cette erreur, un certain temps Il montre ce type d'erreurs sinon il s'exécute n mise à jour correctement .. et le code de la ligne 129 est: proupdate.HttpClient_Profile_Post (contexte, FacultyDatabaseHalper.mFacName.get (0), – CKnDROID

+0

Donc soit proupdate est nul ou le contexte ir est nul ou mFacName est nul ou mFacName la taille est zéro! Vous devez mettre du debug/log ou des breakpoints et tester ce qui se passe. – Budius

0
@Override 
    public void onStart(Intent intent, int startId) { 
// TODO Auto-generated method stub 
mTimerTask = new TimerTask() { 
    public void run() { 
      nCounter++; 
       connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 

final android.net.NetworkInfo wifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

final android.net.NetworkInfo mobile = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

if (wifi.isAvailable()) { 

    mTimerTask.cancel(); 

    try{ 
    new myPostData().execute(); 
    }catch (Exception e) { 
     // TODO: handle exception 
    } 

} else if (mobile.isAvailable()) { 

    mTimerTask.cancel(); 
    try{ 

     new myPostData().execute(); 

    }catch (Exception e) { 
      // TODO: handle exception 
    } 

} else { 

// Toast.makeText(getBaseContext(),"You are trying to access online content but Internet Connection has been disconnected!!!",Toast.LENGTH_SHORT).show(); 

} 

    Log.d("TIMER", "TimerTask run"); 
    } 
}; 

// public void schedule (TimerTask task, long delay, long period) 
t.schedule(mTimerTask, 0, 10000); // 

} 

gestionnaire de suppression() dans votre service .. vous n'obtiendrez cette erreur à nouveau .. s'il vous plaît apporter des modifications dans votre code comme suit.

+0

Helloo, Vinod Kumar, j'ai essayé comme U a dit .. mais encore nous obtenons la même erreur. En mode hors ligne, j'ai sauvegardé mes données dans la base de données locale, quand je fais wi fi ON .. quand Internet est disponible à ce moment-là mes applications se sont écrasées. Donc qu'est ce que je devrais faire..? – CKnDROID

Questions connexes