2016-08-13 48 views
0

我已經創建了一個php和json的登錄頁面,但是當我離線並使用該程序代替顯示錯誤時,程序關閉。 如何顯示此消息:「請檢查您的網絡連接」? 不幸的是start1已經停止。json連接錯誤例外

的Android代碼:

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(); 
     } 
    } 
} 
+0

這是我的php代碼: – Dura

回答

0

首先檢查是否netwrok連接與否:

,然後在你的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" /> 
+0

我試試你的解決方案,但它仍然說不幸start1已經停止,只是在這段時間它回到最後一頁,而不是關閉它 – Dura

+0

發佈你logcat錯誤。 –

+0

非常感謝!現在它工作正常! – Dura

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(上下文)如果爲true,則繼續後臺任務,否則返回一些有意義的限定沒有網絡。