添加到请求队列volley lib

时间:2015-07-25 10:15:53

标签: android eclipse ubuntu-14.04 android-volley

我正在尝试为我的Android应用程序进行注册活动。我按照以下链接教程:Android Login and Registration with PHP, MySQL and SQLite

本教程帮助我使用php api将我的应用程序连接到MYSQL数据库,并使用volley库将互联网请求连接到package com.example.coolpoolers; import android.app.Activity; import android.app.ActionBar; import android.app.Fragment; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.View.OnClickListener; import android.view.WindowManager; import android.widget.ToggleButton; import android.os.Build; import app.AppConfig; import app.AppController; import helper.SQLiteHandler; import helper.SessionManager; import java.util.HashMap; import java.util.Map; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import com.android.volley.Request.Method; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.StringRequest; public class SignUp extends Activity { private static final String TAG = SignUp.class.getSimpleName(); private EditText inputFullName; private EditText inputEmail; private EditText inputPassword; private ProgressDialog pDialog; private SessionManager session; private SQLiteHandler db; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sign_up); inputFullName = (EditText) findViewById(R.id.name); inputEmail = (EditText) findViewById(R.id.email); inputPassword = (EditText) findViewById(R.id.password); findViewById(R.id.signupBt).setOnClickListener(signupBt); pDialog = new ProgressDialog(this); pDialog.setCancelable(false); // Session manager session = new SessionManager(getApplicationContext()); // SQLite database handler db = new SQLiteHandler(getApplicationContext()); // Check if user is already logged in or not if (session.isLoggedIn()) { // User is already logged in. Take him to main activity Intent intent = new Intent(SignUp.this, AfterSignIn.class); startActivity(intent); finish(); } } OnClickListener signupBt = new OnClickListener(){ @Override public void onClick(View v) { String name = inputFullName.getText().toString(); String email = inputEmail.getText().toString(); String password = inputPassword.getText().toString(); if (!name.isEmpty() && !email.isEmpty() && !password.isEmpty()) { registerUser(name, email, password); } else { Toast.makeText(getApplicationContext(), "Please enter your details!", Toast.LENGTH_LONG) .show(); } } }; /** * Function to store user in MySQL database will post params(tag, name, * email, password) to register url * */ private void registerUser(final String name, final String email, final String password) { // Tag used to cancel the request String tag_string_req = "req_register"; pDialog.setMessage("Registering ..."); showDialog(); StringRequest strReq = new StringRequest(Method.POST, "MY IP", new Response.Listener<String>() { @Override public void onResponse(String response) { Log.d(TAG, "Register Response: " + response.toString()); hideDialog(); try { JSONObject jObj = new JSONObject(response); boolean error = jObj.getBoolean("error"); if (!error) { // User successfully stored in MySQL // Now store the user in sqlite String uid = jObj.getString("uid"); JSONObject user = jObj.getJSONObject("user"); String name = user.getString("name"); String email = user.getString("email"); String created_at = user .getString("created_at"); // Inserting row in users table db.addUser(name, email, uid, created_at); // Launch login activity Intent intent = new Intent( SignUp.this, LogIn.class); startActivity(intent); finish(); } else { // Error occurred in registration. Get the error // message String errorMsg = jObj.getString("error_msg"); Toast.makeText(getApplicationContext(), errorMsg, Toast.LENGTH_LONG).show(); } } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e(TAG, "Registration Error: " + error.getMessage()); Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show(); hideDialog(); } }) { @Override protected Map<String, String> getParams() { // Posting params to register url Map<String, String> params = new HashMap<String, String>(); params.put("tag", "register"); params.put("name", name); params.put("email", email); params.put("password", password); return params; } }; strReq.getBodyContentType(); Toast.makeText(getApplicationContext(), tag_string_req, Toast.LENGTH_LONG) .show(); // Adding request to request queue **error line below** AppController.getInstance().addToRequestQueue(strReq, tag_string_req); } private void showDialog() { if (!pDialog.isShowing()) pDialog.show(); } private void hideDialog() { if (pDialog.isShowing()) pDialog.dismiss(); } } 数据库。在完成教程并仔细应用其步骤之后,当我尝试应用程序时,应用程序会在注册过程发生之前停止。一个窗口弹出说:“不幸的是,我的应用已经停止了。” 我一直跟踪代码,直到我发现导致错误的行,但我不知道为什么它会导致这样的错误或如何解决它。以下是我的代码:

注册活动(输入注册数据和点击按钮的主要活动):

package app;

import android.app.Application;
import android.text.TextUtils;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;

public class AppController extends Application {

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

    private RequestQueue mRequestQueue;

    private static AppController mInstance;

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

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

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

        return mRequestQueue;
    }

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

下面是按下注册按钮后从logcat复制的错误日志。发生错误的下面提到的230行在上面的代码中提到:错误行

  

E / AndroidRuntime(842):致命异常:主

     

E / AndroidRuntime(842):java.lang.NullPointerException

     

E / AndroidRuntime(842):at   com.example.coolpoolers.SignUp.registerUser(SignUp.java:230)

错误行调用其方法的AppController类:

/^[ A-Za-z0-9_@.\/#&+-]*$/

真的对任何帮助表示赞赏。我真的被卡住了。此外,如果有任何数据丢失,你需要我在我的代码中添加它,这可能有助于定义错误或其原因告诉我,我会添加它。

我正在使用Eclipse Mars,java 1.7,安装了最多24个的SDK 19,ubuntu 14.04。

感谢。

1 个答案:

答案 0 :(得分:1)

似乎AppController实例正在提供空指针异常。   你有没有在android清单中提到过你的AppController     < application android:name="app.AppController" .......> </application>