Java Android中的关闭VM和致命异常

Java Android中的关闭VM和致命异常,java,android,Java,Android,每次我看到日志猫出现致命异常和关闭虚拟机的消息时,我都尝试使用bt,因为有一些解决方案关于这个错误,我找不到它,请帮助我摆脱它,我是android新手,所以可能是我犯了一个小错误,所以请给我解决方案 下面是我的代码 main.java package com.login.demo; import impl.dao.InspectionVO; import impl.dao.Inspection_damages; import impl.dbOperation.Operation; import

每次我看到日志猫出现致命异常和关闭虚拟机的消息时,我都尝试使用bt,因为有一些解决方案关于这个错误,我找不到它,请帮助我摆脱它,我是android新手,所以可能是我犯了一个小错误,所以请给我解决方案

下面是我的代码

main.java

package com.login.demo;
import impl.dao.InspectionVO;
import impl.dao.Inspection_damages;
import impl.dbOperation.Operation;
import impl.internetcheck.CkeckNetConnection;
import impl.urlConnection.CommonUtill;

import java.util.ArrayList;
import java.util.concurrent.ExecutionException;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.gson.Gson;

public class main extends Activity implements OnClickListener
{

    EditText unm, pwd;
    String webResponse1 = "NA";
    String uname, password;
    Operation op = new Operation(this);
    SharedPreferences pref;
    static String jsonstr;
    public static String msg = "nothing";


    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        unm = (EditText) findViewById(R.id.editText1);
        pwd = (EditText) findViewById(R.id.editText2);
        Button lgn = (Button) findViewById(R.id.button1);

        op.getContainerid();


        //****Check for Connection at First time********
        lgn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v)
    {
        uname = unm.getText().toString().trim();
        password=  pwd.getText().toString().trim();

        if (v.getId() == R.id.button1)
        {
            String status = CkeckNetConnection.getConnectivityStatusString(main.this);
            if (status.equals("Mobile"))
            {
                MyAsynTask obj = new MyAsynTask();
                //Testing?param1=admin&param2=admin
                String login = "firstLogin?param1=" + uname + "&param2=" + password;

                //String login = "Testing?param1="+uname+"&param2="+password;
                //  String SubURL ="insertInsp?param1="+str1;
                Log.i("check 1", "Info 1");
                try
                {
                    msg = "Login..";
                    obj.execute(login).get();
                    Log.i("Login object", "Text set : " + jsonstr);
                    if (jsonstr.equals("true"))
                    {
                        Log.i("ketan", "Inside condition");
                        String inspid = op.getContainerid();
                        Log.i("id", inspid);
                        int ids=Integer.parseInt(inspid);
                        int id=1;
                        if(ids>0)
                        {
                            //Log.i("Test1","Here");
                            while(id<=ids)
                            {
                                InspectionVO insp=op.getInspection(id);
                                Gson gson=new Gson();
                                //String jsonStr=gson.toJson(insp);

                                StringBuilder tmp = new StringBuilder();
                                tmp.append(gson.toJson(insp));
                                Log.i("Stringssss", tmp.toString());



                                StringBuilder sb = new StringBuilder();
                                sb.append("insertInsp?param1="+java.net.URLEncoder.encode(tmp.toString()));

                                MyAsynTask inspection=new MyAsynTask();
                                inspection.execute(sb.toString()).get();


                                ArrayList<Inspection_damages> ar=op.getImages(id);
                                for(Integer k=0;k<ar.size();k++)
                                {
                                    ar.get(k).setInsp_id(jsonstr);
                                    StringBuilder tmp1 = new StringBuilder();
                                    tmp1.append(gson.toJson(ar.get(k)));
                                    Log.i("Stringssss", ar.get(k).getD_code());
                                    Log.i("Stringssss", tmp1.toString());

                                    StringBuilder sb1 = new StringBuilder();
                                    sb1.append("insertInspDamage?param1="+java.net.URLEncoder.encode(tmp1.toString()));
                                    Log.i("left", sb1.toString());
                                    MyAsynTask obj1=new MyAsynTask();
                                    obj1.execute(sb1.toString()).get();

                                }

                                id++;


                            }

                        }
                        /*    msg="recieving data..";
                        String uid = op.getusersid();
                        Log.i("Response","check it"+uid);
                        MyAsynTask user = new MyAsynTask();
                        String users = "getUsers?param1="+uid;
                        user.execute(users).get();
                        Log.i("Response", jsonstr);
                        Gson gson = new Gson();

                        Type type = new TypeToken<ArrayList<UserVO>>() {}.getType();
                        ArrayList<UserVO> ar = gson.fromJson(jsonstr,type);
                        if(!(ar==null))
                        {
                            op.InsertUsers(ar);
                        }
                        /*    MyAsynTask cont=new MyAsynTask();
                        String conts="getCT?";
                        cont.execute(conts).get();
                        Log.i("Response", jsonstr);


                        Type types = new TypeToken<ArrayList<InspectionVO>>() {}.getType();
                        ArrayList<InspectionVO> cnar= gson.fromJson(jsonstr,types);
                        op.InsertCT(cnar);*/

                        Intent i=new Intent(getApplicationContext(),mainbutton.class);
                        startActivity(i);
                        Toast.makeText(getApplicationContext(), "successfully login",10).show();
                    }
                    else
                    {
                        Log.i("Login status", "fail");
                        Toast.makeText(main.this, "Wrong username or password", Toast.LENGTH_LONG).show();
                        unm.setText("");
                        pwd.setText("");
                    }

                    /*String users="getUsers?";
                    obj.execute(users).get();
                    Log.i("Response", jsonstr);
                    Gson gson = new Gson();

                    Type type = new TypeToken<ArrayList<UserVO>>() {}.getType();
                    ArrayList<UserVO> ar = gson.fromJson(jsonstr,type);
                    */ 
                } catch (InterruptedException e)
                {
                    e.printStackTrace();
                } catch (ExecutionException e)
                {
                    e.printStackTrace();
                }
            }
            else if(status.equals("Not"))
            {
                Intent i=new Intent(getApplicationContext(),mainbutton.class);
                startActivity(i);
                Toast.makeText(getApplicationContext(), "successfully login",10).show();
                /*    Toast.makeText(main.this, "No Net Connection", Toast.LENGTH_LONG).show();
                unm.setText("");
                pwd.setText("");*/
            }
        }
    }

    private class MyAsynTask extends AsyncTask<String, Void, String>
    {
        ProgressDialog Asycdialog = new ProgressDialog(main.this);

        @Override
        protected void onPreExecute() {
            //set message of the dialog
            Asycdialog.setMessage(msg);
            //show dialog
            Asycdialog.show();
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(String... params)
        {
            //String webResponse= CommonUtill.getOutputFromUrl(CommonUtill.URL+"checkLogin?param1=admin&param2=admin");
            jsonstr=CommonUtill.getOutputFromUrl(CommonUtill.URL+params[0]);


            // TODO Auto-generated method stub
            return null;
        }





        protected void onPostExecute(String result)
        {
            //hide the dialog
            Asycdialog.dismiss();

            super.onPostExecute(result);
        }
    }
}

尝试像这样替换所有日志

 Log.i("Stringssss", tmp.toString());


尝试像这样替换所有日志

 Log.i("Stringssss", tmp.toString());


尝试像这样替换所有日志

 Log.i("Stringssss", tmp.toString());


尝试像这样替换所有日志

 Log.i("Stringssss", tmp.toString());


您正在向Log.i发送一个空对象,该对象位于方法onClick的某个位置。 您可以通过调用String.valueOf来保护您的对象日志,它是空安全的,并返回
“null”
使用

而不是

Log.i(TAG, myObject);

如果您不想麻烦测试对象是否为空。

您正在将一个空对象发送到Log.i方法的某个地方。 您可以通过调用String.valueOf来保护您的对象日志,它是空安全的,并返回
“null”
使用

而不是

Log.i(TAG, myObject);

如果您不想麻烦测试对象是否为空。

您正在将一个空对象发送到Log.i方法的某个地方。 您可以通过调用String.valueOf来保护您的对象日志,它是空安全的,并返回
“null”
使用

而不是

Log.i(TAG, myObject);

如果您不想麻烦测试对象是否为空。

您正在将一个空对象发送到Log.i方法的某个地方。 您可以通过调用String.valueOf来保护您的对象日志,它是空安全的,并返回
“null”
使用

而不是

Log.i(TAG, myObject);
如果您不想麻烦测试对象的空值。

原因 出现此异常是因为正在将空值传递给Log,也就是说,您正在尝试记录一个对象的未初始化引用或一个现在指向空的实例,如logcat的下一行所示

07-16 02:08:18.095:E/AndroidRuntime(2160):java.lang.NullPointerException:println需要一条消息

解决方案
  • 在记录日志之前始终使用空检查

    如果(平淡!=null)
    Log.i(“id”,inspid)

  • 将“”附加到正在记录的值后,这将确保记录的最终值永远不为null。然而,这是一种糟糕的方法,空对象最好按照上面所示进行检查和记录

    Log.i(“id”,即“+inspid”)

代码中可能的位置 以下两个代码块看起来像是异常的理想候选

位置1:

Log.i("id", inspid); <<--inspid may be null
ar.get(k).setInsp_id(jsonstr);
StringBuilder tmp1 = new StringBuilder();
tmp1.append(gson.toJson(ar.get(k)));
Log.i("Stringssss", ar.get(k).getD_code()); <<--ar.get(k).getD_code() may be null
Log.i("Stringssss", tmp1.toString()); <<--tmp1 may be null
Log.i(“id”,inspid);原因
出现此异常是因为正在将空值传递给Log,也就是说,您正在尝试记录一个对象的未初始化引用或一个现在指向空的实例,如logcat的下一行所示

07-16 02:08:18.095:E/AndroidRuntime(2160):java.lang.NullPointerException:println需要一条消息

解决方案
  • 在记录日志之前始终使用空检查

    如果(平淡!=null)
    Log.i(“id”,inspid)

  • 将“”附加到正在记录的值后,这将确保记录的最终值永远不为null。然而,这是一种糟糕的方法,空对象最好按照上面所示进行检查和记录

    Log.i(“id”,即“+inspid”)

代码中可能的位置 以下两个代码块看起来像是异常的理想候选

位置1:

Log.i("id", inspid); <<--inspid may be null
ar.get(k).setInsp_id(jsonstr);
StringBuilder tmp1 = new StringBuilder();
tmp1.append(gson.toJson(ar.get(k)));
Log.i("Stringssss", ar.get(k).getD_code()); <<--ar.get(k).getD_code() may be null
Log.i("Stringssss", tmp1.toString()); <<--tmp1 may be null
Log.i(“id”,inspid);原因
出现此异常是因为正在将空值传递给Log,也就是说,您正在尝试记录一个对象的未初始化引用或一个现在指向空的实例,如logcat的下一行所示

07-16 02:08:18.095:E/AndroidRuntime(2160):java.lang.NullPointerException:println需要一条消息

解决方案
  • 在记录日志之前始终使用空检查

    如果(平淡!=null)
    Log.i(“id”,inspid)

  • 将“”附加到正在记录的值后,这将确保记录的最终值永远不为null。然而,这是一种糟糕的方法,空对象最好按照上面所示进行检查和记录

    Log.i(“id”,即“+inspid”)

代码中可能的位置 以下两个代码块看起来像是异常的理想候选

位置1:

Log.i("id", inspid); <<--inspid may be null
ar.get(k).setInsp_id(jsonstr);
StringBuilder tmp1 = new StringBuilder();
tmp1.append(gson.toJson(ar.get(k)));
Log.i("Stringssss", ar.get(k).getD_code()); <<--ar.get(k).getD_code() may be null
Log.i("Stringssss", tmp1.toString()); <<--tmp1 may be null
Log.i(“id”,inspid);原因
出现此异常是因为正在将空值传递给Log,也就是说,您正在尝试记录一个对象的未初始化引用或一个现在指向空的实例,如logcat的下一行所示

07-16 02:08:18.095:E/AndroidRuntime(2160):java.lang.NullPointerException:println需要一条消息

解决方案
  • 在记录日志之前始终使用空检查

    如果(平淡!=null)
    Log.i(“id”,inspid)

  • 将“”附加到正在记录的值后,这将确保记录的最终值永远不为null。然而,这是一种糟糕的方法,空对象最好按照上面所示进行检查和记录

    Log.i(“id”,即“+inspid”)

代码中可能的位置 以下两个代码块看起来像是异常的理想候选

位置1:

Log.i("id", inspid); <<--inspid may be null
ar.get(k).setInsp_id(jsonstr);
StringBuilder tmp1 = new StringBuilder();
tmp1.append(gson.toJson(ar.get(k)));
Log.i("Stringssss", ar.get(k).getD_code()); <<--ar.get(k).getD_code() may be null
Log.i("Stringssss", tmp1.toString()); <<--tmp1 may be null

Log.i(“id”,inspid);尝试控制log.i()调用中的第二个参数。尝试控制log.i()调用中的第二个参数。尝试控制log.i()调用中的第二个参数。尝试控制log.i()调用中的第二个参数。