2016-02-17 3 views
1

Я пытаюсь создать чат-приложение с использованием GCM. Я использую это для справкиОшибка во время волейбола при регистрации

http://www.androidhive.info/2016/02/android-push-notifications-using-gcm-php-mysql-realtime-chat-app-part-2/

Имя пользователя и электронный идентификатор не добавляется в базу данных. Когда я использую Postman, он работает хорошо. Во время регистрации я столкнулся проблемой

Это мой LoginActivity

public class LoginActivity extends AppCompatActivity { 

private String TAG = LoginActivity.class.getSimpleName(); 
private EditText inputName, inputEmail; 
private TextInputLayout inputLayoutName, inputLayoutEmail; 
private Button btnEnter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    /** 
    * Check for login session. It user is already logged in 
    * redirect him to main activity 
    * */ 
    if (MyApplication.getInstance().getPrefManager().getUser() != null) { 
     startActivity(new Intent(this, MainActivity.class)); 
     finish(); 
    } 

    setContentView(R.layout.activity_login); 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    inputLayoutName = (TextInputLayout) findViewById(R.id.input_layout_name); 
    inputLayoutEmail = (TextInputLayout) findViewById(R.id.input_layout_email); 
    inputName = (EditText) findViewById(R.id.input_name); 
    inputEmail = (EditText) findViewById(R.id.input_email); 
    btnEnter = (Button) findViewById(R.id.btn_enter); 

    inputName.addTextChangedListener(new MyTextWatcher(inputName)); 
    inputEmail.addTextChangedListener(new MyTextWatcher(inputEmail)); 

    btnEnter.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      login(); 
     } 
    }); 
} 

/** 
* logging in user. Will make http post request with name, email 
* as parameters 
*/ 
private void login() { 
    if (!validateName()) { 
     return; 
    } 

    if (!validateEmail()) { 
     return; 
    } 

    final String name = inputName.getText().toString(); 
    final String email = inputEmail.getText().toString(); 

    Log.e("endpoint loginb url",""+EndPoints.LOGIN); 
    StringRequest strReq = new StringRequest(Request.Method.POST, 
      EndPoints.LOGIN, new Response.Listener<String>() { 



     @Override 
     public void onResponse(String response) { 
      Log.e(TAG, "response: " + response); 

      try { 
       JSONObject obj = new JSONObject(response); 

       // check for error flag 
       if (obj.getBoolean("error") == false) { 
        // user successfully logged in 

        JSONObject userObj = obj.getJSONObject("user"); 
        User user = new User(userObj.getString("user_id"), 
          userObj.getString("name"), 
          userObj.getString("email")); 

        // storing user in shared preferences 
        MyApplication.getInstance().getPrefManager().storeUser(user); 

        // start main activity 
        startActivity(new Intent(getApplicationContext(), MainActivity.class)); 
        finish(); 

       } else { 
        // login error - simply toast the message 
        Toast.makeText(getApplicationContext(), "" + obj.getJSONObject("error").getString("message"), Toast.LENGTH_LONG).show(); 
       } 

      } catch (JSONException e) { 
       Log.e(TAG, "json parsing error: " + e.getMessage()); 
       Toast.makeText(getApplicationContext(), "Json parse error: " + e.getMessage(), Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 

      if (error instanceof TimeoutError || error instanceof NoConnectionError) { 
       Log.e("Timeout", "timeout"); 
      } else if (error instanceof AuthFailureError) { 
       Log.e("AuthFailureError","AuthFailureError"); 

      } else if (error instanceof ServerError) { 
       Log.e("ServerError","ServerError"); 
      } else if (error instanceof NetworkError) { 
       Log.e("NetworkError","NetworkError"); 
      } else if (error instanceof ParseError) { 
       Log.e("ParseError","ParseError"); 
      } 
     } 
    }) { 

     @Override 
     protected Map<String, String> getParams() { 
      Map<String, String> params = new HashMap<>(); 
      params.put("name", name); 
      params.put("email", email); 

      Log.e(TAG, "params: " + params.toString()); 
      return params; 
     } 
    }; 

    //Adding request to request queue 
    MyApplication.getInstance().addToRequestQueue(strReq); 
    strReq.setRetryPolicy(new RetryPolicy() { 
     @Override 
     public int getCurrentTimeout() { 
      return 50000; 
     } 

     @Override 
     public int getCurrentRetryCount() { 
      return 50000; 
     } 

     @Override 
     public void retry(VolleyError error) throws VolleyError { 

     } 
    }); 

} 

private void requestFocus(View view) { 
    if (view.requestFocus()) { 
     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 
    } 
} 

// Validating name 
private boolean validateName() { 
    if (inputName.getText().toString().trim().isEmpty()) { 
     inputLayoutName.setError(getString(R.string.err_msg_name)); 
     requestFocus(inputName); 
     return false; 
    } else { 
     inputLayoutName.setErrorEnabled(false); 
    } 

    return true; 
} 

// Validating email 
private boolean validateEmail() { 
    String email = inputEmail.getText().toString().trim(); 

    if (email.isEmpty() || !isValidEmail(email)) { 
     inputLayoutEmail.setError(getString(R.string.err_msg_email)); 
     requestFocus(inputEmail); 
     return false; 
    } else { 
     inputLayoutEmail.setErrorEnabled(false); 
    } 

    return true; 
} 

private static boolean isValidEmail(String email) { 
    return !TextUtils.isEmpty(email) && android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches(); 
} 

private class MyTextWatcher implements TextWatcher { 

    private View view; 
    private MyTextWatcher(View view) { 
     this.view = view; 
    } 

    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
    } 

    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
    } 

    public void afterTextChanged(Editable editable) { 
     switch (view.getId()) { 
      case R.id.input_name: 
       validateName(); 
       break; 
      case R.id.input_email: 
       validateEmail(); 
       break; 
     } 
    } 
} 
} 

Это MyApplication.java

public class MyApplication extends Application { 

public static final String TAG = MyApplication.class 
     .getSimpleName(); 

private RequestQueue mRequestQueue; 

private static MyApplication mInstance; 

private MyPreferenceManager pref; 

@Override 
public void onCreate() { 
    super.onCreate(); 
    mInstance = this; 
} 

public static synchronized MyApplication getInstance() { 
    return mInstance; 
} 

public RequestQueue getRequestQueue() { 
    if (mRequestQueue == null) { 
     mRequestQueue = Volley.newRequestQueue(getApplicationContext()); 

    } 

    return mRequestQueue; 
} 

public MyPreferenceManager getPrefManager() { 
    if (pref == null) { 
     pref = new MyPreferenceManager(this); 
    } 

    return pref; 
} 

public <T> void addToRequestQueue(Request<T> req, String tag) { 
    req.setTag(TextUtils.isEmpty(tag) ? TAG : tag); 
    getRequestQueue().add(req); 
} 

public <T> void addToRequestQueue(Request<T> req) { 
    req.setTag(TAG); 
    getRequestQueue().add(req); 
} 

public void cancelPendingRequests(Object tag) { 
    if (mRequestQueue != null) { 
     mRequestQueue.cancelAll(tag); 
    } 
} 

public void logout() { 
    pref.clear(); 
    Intent intent = new Intent(this, LoginActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
    startActivity(intent); 
} 

EDIT Я использовал это, но до сих пор не работает.

MyApplication.getInstance().addToRequestQueue(strReq); 

    strReq.setRetryPolicy(new DefaultRetryPolicy(
      50000, 
      DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
      DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 


    RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext()); 
    requestQueue.add(strReq); 

Записана ошибка, и я получаю TimeOutError. Пожалуйста, помогите

ответ

0

Спасибо за ваши ответы. Я узнал свою ошибку. Я запускал его на локальном хостинге, используя IP-адрес, и приложение выполнялось на устройстве, которое не имеет подключения netowrk к ПК, поэтому IP-адрес был другим. поэтому я каждый раз получал ошибку тайм-аута. Спасибо

1

Для вашего запроса добавьте следующую кусочек кода.

 strReq.setRetryPolicy(new DefaultRetryPolicy(
      30*1000, 
      DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
      DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
     requestQueue.add(strReq); 
+0

спасибо ... но это также не работает – Priyanka

+0

Проверьте, использовалось ли разрешение в вашем файле манифеста. –

+0

да я использовал – Priyanka

0

Используйте этот фрагмент кода, это поможет мне решить ошибку залпа тайм-аут

stringRequest.setRetryPolicy(new DefaultRetryPolicy(
      50000, 
      DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
      DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 


RequestQueue requestQueue = Volley.newRequestQueue(getActivity()); 
    requestQueue.add(stringRequest); 
+0

спасибо, но это не работает – Priyanka

+0

Plz check Я добавил код – Priyanka

+0

новый Response.ErrorListener() {@Override public void onErrorResponse (ошибка волейбола) {Log.e ("Url", error.toString () + ""); }}) {}; stringRequest.setRetryPolicy (новый DefaultRetryPolicy (50000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); Используйте таким образом ниже новый ответ. ErrorListener –