android - 执行doInBackground()时出现java.lang.RuntimeException错误如何解决?

标签 android android-service android-handler android-internet

我是 android 开发的初学者,我在以下代码中遇到错误。我正在为 http 请求调用 asyn 方法,在此之前我正在检查 Wifi 或移动网络是否可用。当 Internet 连接可用时,我的服务运行良好,但在离线模式下我会收到此类错误: “java.lang.RuntimeException:执行 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)

下面是 MyServiceProfile 代码。在这段代码中,我首先检查互联网连接,然后如果用户离线,数据保存在本地数据库中,并在互联网连接期间自动更新我们的服务器

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 或移动互联网连接时崩溃,我认为当时服务没有正常运行。 :( 等待您的建议、解决方案和您的想法。 谢谢。

最佳答案

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)

根据这两行代码,您在代码的第 129 行有一个 Null 指针。

转到那一行,检查正在做什么,找到空对象并修复它。 那是调试 101。

关于android - 执行doInBackground()时出现java.lang.RuntimeException错误如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15946153/

相关文章:

android - 使用回调和处理程序更改 Android 中的 UI 元素

android - 无法访问处理程序中的类变量?

android - CPU 休眠时不会触发 Handler postDelayed 吗?

Android map 扩展 : return map as null

android - 有没有办法强制 "Display over other apps"Android 10 Go?

android - 如何更新我的通知以显示我的时间计数器发生变化?

android - 始终在通知栏中显示服务

Android SDK 功能未实现

java - Android 中的 WorkManager Schedule_requested_at time 等于 -1。什么意思?

android - 我应该把我的 retrofit 电话和 Android 服务类放在里面吗?