【问题标题】:json exception for connection error连接错误的json异常
【发布时间】:2016-08-13 08:29:57
【问题描述】:

我用 php 和 json 创建了一个登录页面,但是当我离线并使用该程序而不是显示错误时,该程序已关闭。 如何显示此消息:“请检查您的网络连接”? 现在它说不幸的是 start1 已停止。

安卓代码:

public class Login extends Activity {

EditText user,pass;
Button btnReg;
private static String url = "http://akosamanus.xzn.ir/Login.php";
private ProgressDialog pd;
JSONParser jparser = new JSONParser();
private static final String TAG_SUCCESS = "success";
private static final String TAG_MESSAGE = "message";



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);


    user = (EditText)findViewById(R.id.etgetuser);
    pass = (EditText)findViewById(R.id.etgetpass);
    btnReg = (Button)findViewById(R.id.btnReg);

    btnReg.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            new loadperson().execute();

        }
    });



}

class loadperson extends AsyncTask<String, String, String> {




    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pd = new ProgressDialog(Login.this);
        pd.setMessage("login");

        pd.show();
    }

    @Override
    protected String doInBackground(String... strings) {


        int success;
        String username = user.getText().toString();
        String password = pass.getText().toString();

        try {

            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("username",username));
            params.add(new BasicNameValuePair("password",password));

            Log.d("request!", "starting");

            JSONObject json = jparser.makeHttpRequest(url, "POST", params);
            Log.d("Login attempt", json.toString());
            success = json.getInt(TAG_SUCCESS);
            if (success == 1) {
                Log.d("Successfully Login!", json.toString());



                Intent ii = new Intent(Login.this,com.example.eagle.start1.SelectPage.class);
                ii.putExtra("UserName", username);
                startActivity(ii);
                return json.getString(TAG_MESSAGE);
            }else{

                return json.getString(TAG_MESSAGE);

            }
        } catch (JSONException e) {
            e.printStackTrace();

        }



        return null;
    }

    @Override
    protected void onPostExecute(String message) {

        pd.dismiss();
        if (message != null){
            Toast.makeText(Login.this, message, Toast.LENGTH_SHORT).show();
        }
    }
}

【问题讨论】:

    标签: php android mysql json post


    【解决方案1】:
    public class ConnectionDetector {
    
        public boolean isConnectingToInternet(Context context) {
    
            boolean haveConnectedWifi = false;
            boolean haveConnectedMobile = false;
    
            ConnectivityManager cm = (ConnectivityManager) context
                                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo[] netInfo = cm.getAllNetworkInfo();
            for (NetworkInfo ni : netInfo) {
                if (ni.getTypeName().equalsIgnoreCase("WIFI"))
                    if (ni.isConnected())
                        haveConnectedWifi = true;
                if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
                    if (ni.isConnected())
                        haveConnectedMobile = true;
            }
    
            if (haveConnectedWifi || haveConnectedMobile) {
                try {
                    URL url = new URL("https://www.google.com");
                    HttpURLConnection urlc = (HttpURLConnection)   url.openConnection();
                    urlc.setRequestProperty("User-Agent", "Test");
                    urlc.setRequestProperty("Connection", "delete");
                    urlc.setConnectTimeout(1000 * 5); // mTimeout is in seconds
                    urlc.connect();
                    if (urlc.getResponseCode() == 200) {
                        return true;
                    } else {
                        return false;
                    }
                } catch (Exception e) {
                    Log.e("internet error", "" + e);
                    return false;
                }
            } else {
                return false;
            }
        }
    }
    

    并且在 doInBackground 方法中使用 isConnectingToInternet(context) 如果 true 然后继续后台任务,否则返回一些有意义的定义没有网络。

    【讨论】:

      【解决方案2】:

      首先检查网络是否连接:

       public boolean isConnectedToNetwork() {
          ConnectivityManager cm =
              (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
          NetworkInfo netInfo = cm.getActiveNetworkInfo();
          return netInfo != null && netInfo.isConnectedOrConnecting();
      }
      

      然后在您的 onClickListener 中将其用作:

      btnReg.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View view) {
              if(isConnectedToNetwork())
              new loadperson().execute();
              else
              Toast.makeText(Login.this,"Please check your network connection",Toast.LENGTH_SHORT).show();
      
          }
      });
      

      同时将权限添加到AndroidMenifest

      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
      

      【讨论】:

      • 我尝试了您的解决方案,但它仍然说不幸的是 start1 已停止,只是此时它回到最后一页而不是关闭它
      猜你喜欢
      • 2012-03-09
      • 2013-07-06
      • 1970-01-01
      • 1970-01-01
      • 2017-07-23
      • 1970-01-01
      • 2014-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多