onResponse未调用Response.listener的方法

问题描述:

我是凌空新手,尝试为此开发聊天应用程序,因此我使用post方法登录,所以当我从邮递员处发布PHP代码时,运行良好(使用slim),以及何时我尝试了与Android相同的方法onResponse()方法未运行,但onResponseError()运行结果输出未到。代码是作为onResponse未调用Response.listener的方法

package com.example.user.gcm_chat.activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.design.widget.TextInputLayout; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.text.Editable; 
import android.text.TextUtils; 
import android.text.TextWatcher; 
import android.util.Log; 
import android.view.View; 
import android.view.WindowManager; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

import com.android.volley.NetworkResponse; 
import com.android.volley.Request; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.StringRequest; 

import org.json.JSONException; 
import org.json.JSONObject; 

import java.util.HashMap; 
import java.util.Map; 

import com.example.user.gcm_chat.R; 
import com.example.user.gcm_chat.app.EndPoints; 
import com.example.user.gcm_chat.app.MyApplication; 
import com.example.user.gcm_chat.model.User; 

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); 


    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(); 

    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) { 
      NetworkResponse networkResponse = error.networkResponse; 
      Log.e(TAG, "Volley error:" + error.getMessage() + ", code: " + networkResponse); 
      Toast.makeText(getApplicationContext(), "Volley error: " + error.getMessage(), Toast.LENGTH_SHORT).show(); 
     } 
    }) { 

     @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); 
} 

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; 
     } 
    } 
} 
} 

Endpoint.java

包com.example.user.gcm_chat.app;

public class EndPoints { 

// localhost url - 
public static final String BASE_URL = "http://localhost/gcm_chat/v1"; 
public static final String LOGIN = BASE_URL + "/user/login"; 
public static final String USER = BASE_URL + "/user/_ID_"; 
public static final String CHAT_ROOMS = BASE_URL + "/chat_rooms"; 
public static final String CHAT_THREAD = BASE_URL + "/chat_rooms/_ID_"; 
public static final String CHAT_ROOM_MESSAGE = BASE_URL + "/chat_rooms/_ID_/message"; 
} 

错误日志

09-25 15:15:34.758 15166-15275/com.example.user.gcm_chat E/DynamiteModule: Failed to load module descriptor class: Didn't find class "com.google.android.gms.dynamite.descriptors.com.google.firebase.auth.ModuleDescriptor" on path: DexPathList[[zip file "/data/app/com.example.user.gcm_chat-2/base.apk"],nativeLibraryDirectories=[/data/app/com.example.user.gcm_chat-2/lib/arm64, /system/lib64, /vendor/lib64]] 09-25 15:15:42.934 15166-15844/com.example.user.gcm_chat E/LoginActivity: params: {[email protected], name=prashu} 09-25 15:15:46.027 15166-15166/com.example.user.gcm_chat E/LoginActivity: Volley error:null, code: null

的build.gradle

apply plugin: 'com.android.application' 

android { 


compileSdkVersion 24 
buildToolsVersion "24.0.1" 

defaultConfig { 
    applicationId "com.example.user.gcm_chat" 
    minSdkVersion 21 
    targetSdkVersion 24 
    versionCode 1 
    versionName "1.0" 
    multiDexEnabled true 
} 
dexOptions { 
    javaMaxHeapSize "4g" 
} 
buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
} 
} 

dependencies { 
compile fileTree(include: ['*.jar'], dir: 'libs') 
testCompile 'junit:junit:4.12' 
compile 'com.android.support:appcompat-v7:24.1.1' 
compile 'com.android.support:design:24.1.1' 
compile 'com.google.android.gms:play-services:9.0.2' 
compile 'com.mcxiaoke.volley:library:1.0.19' 
compile 'com.android.support:recyclerview-v7:24.1.1' 

} 
apply plugin: 'com.google.gms.google-services' 
+0

你可以从错误日志中看到,有一个与凌空实施,该火力点没有问题Auth实施正在中断,通常未找到Firebase身份验证所需的模块。一次检查你的gradle依赖关系。 – MadScientist

+0

对firebase auth的依赖关系? 'com.google.firebase:firebase-auth:11.4.0' ?? – MadScientist

+0

请别人告诉如何获取运行php服务的计算机的IP地址。 –

确保IP地址,你做了授予所有其他权限设备。 此去Wamp-> Apache-> httpd.conf中和的httpd-vhosts.conf ,然后切换到需要授予

取而代之的是本地主机给你的系统的IP地址。本地主机是指系统。即当应用程序运行时,您的手机是本地主机,并且设备应该连接在同一网络上。如果您使用的是Android模拟器Wifi或USB拴

public static final String BASE_URL = "http://[YOUR IP]/gcm_chat/v1"; 

给为10.0.2.2

希望这可以解决您的问题

+0

我试过这个,错误未解决错误日志显示http://192.170.**.***/gcm_chat/v1/user/login和Volley错误:null,code:com.android.volley意外的响应代码403。 NetworkResponse @ 79f8757 –

+0

使您的项目在本地主机上联机。如果您使用的是WAMp,请检查此https://hsnyc.co/how-to-host-your-own-website-using-wamp-server/ –