2013-04-11 101 views
1

我是Android開發人員的初學者,在下面的代碼中出現錯誤。我正在調用http請求的asyn方法,在此之前我正在檢查Wifi或移動網絡是否可用。當Internet連接可用我的服務運行良好,但是當在離線模式下我是個獲得此類型的錯誤: 「了java.lang.RuntimeException:執行doInBackground發生錯誤()」如何解決執行doInBackground()時發生的java.lang.RuntimeException錯誤?

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) 

下面是MyServiceProfile代碼。在此代碼首先我檢查互聯網連接和AFTR謂如果用戶離線,保存在本地數據庫和互聯網連接的過程數據在我們的服務器

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); 
    } 
} 

}自動更新

我對服務器的HTTP鏈接代碼更新低於:

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; 
} 

}

有時它工作正常,但突然我的應用程序已同時WiFi或移動互聯網connecti墜毀就連接了,我想當時服務沒有正常運行。 :( 根據你必須在你的代碼的129行空指針的2線,等待你的建議,解決方案和您的想法。 感謝名單。

+3

其中線,產生的原因:顯示java.lang.NullPointerException 04-09 19:44:33.057:E/AndroidRuntime(3127):在com.zoomi_zdc.SERVICES.MyServiceProf $ myPostData.doInBackground(MyServiceProf.java:129與NullPointerException異常) – Nermeen 2013-04-11 10:14:29

+1

張貼問題應該在SO被禁止... – Selvin 2013-04-11 10:21:05

+0

它顯示在 「doInBackground」 方法proupdate.HttpClient_Profile_Post(背景下,DatabaseHalper.mStudentRollNo.get(0), – CKnDROID 2013-04-11 10:23:10

回答

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) 

轉到該行,檢查正在做什麼,發現是空的對象,並修復它。 這是調試101

+0

我不明白該錯誤,一段時間它顯示這種類型的錯誤,否則它運行n更新正確..和129行的代碼是: proupdate.HttpClient_Profile_Post(上下文,FacultyDatabaseHalper.mFacName.get(0), – CKnDROID 2013-04-11 10:27:00

+0

因此,proupdate爲null或上下文ir null或mFacName爲null或mFacName大小爲零!你必須把一些調試/日誌或斷點,並測試發生了什麼。 – Budius 2013-04-11 10:32:14

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); // 

} 

刪除處理()在你的服務..你就不會再出現此錯誤..請在更改您的代碼爲如下。

+0

Helloo,Vinod Kumar,我嘗試了U說......但我們仍然得到同樣的錯誤。 在離線模式下,我將數據保存到本地數據庫,當我在無線上網時,當互聯網可用時,我的應用程序崩潰。所以我該怎麼做..? – CKnDROID 2013-04-11 13:17:51

相關問題