2017-02-08 2 views
0

Ich bin neu Android Apps zu schaffen. Was ich tun möchte ist, Variable an PHP-Dienst zu übergeben und wahr oder falsch zu erhalten. Dies ist mein CodePassing Response Klasse anfordern Fehler bekommen

package com.fishingtournaments.tournamentapp; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

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

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

public class LoginActivity extends AppCompatActivity { 
TextView ats; 
EditText qrCode_edit; 
Button check_button; 

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

    ats = (TextView) findViewById(R.id.text_textView); 
    qrCode_edit = (EditText) findViewById(R.id.qrCode_editText); 
    check_button = (Button) findViewById(R.id.check_button); 


    check_button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      String qrCode = qrCode_edit.getText().toString(); 
      //ats.setText(qrCode); 
      Response.Listener<String> responseListener = new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 

        try { 
         JSONObject jsonResponse = new JSONObject(response); 
         boolean success = jsonResponse.getBoolean("success"); 

         if (success){ 

          ats.setText("Toks vartotojas yra"); 

         }else{ 
          ats.setText("Tokio vartotojo nera"); 

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

       } 
      }; 


      LoginRequest loginRequest; 
      loginRequest = new LoginRequest(qrCode, responseListener); 
      RequestQueue queue; 
      queue = Volley.newRequestQueue(LoginActivity.this); 
      queue.add(loginRequest); 
     } 
    }); 
} 

} 

Das ist mein LoginRequest Klasse ist

package com.fishingtournaments.tournamentapp; 

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

import java.util.Map; 

/** 
* Created by manta on 2017-02-08. 
*/ 

public class LoginRequest extends StringRequest { 
    public static String LOGIN_REQUEST_URL = "http://suvalkijossapalas.devpanda.eu/checkQr.php"; 
    public Map<String, String> params; 

    public LoginRequest(String qrcode, Response.Listener<String> listener){ 
     super(Request.Method.POST, LOGIN_REQUEST_URL, listener, null); 
     params.put("qrCode",qrcode); 
    } 

    public Map<String,String> getParams(){ 
     return params; 
    } 

} 

Wenn ich versuche, App auf Emulator und drücken Sie Taste Check Abstürze meine App zu laufen und ich bekomme diese Fehlermeldung:

                   java.lang.NullPointerException: Attempt to invoke interface method 

'java.lang.Object java.util.Map.put(java.lang.Object, java.lang.Object)' on a null object reference at com.fishingtournaments.tournamentapp.LoginRequest.(LoginRequest.java:19) at com.fishingtournaments.tournamentapp.LoginActivity$1.onClick(LoginActivity.java:64) at android.view.View.performClick(View.java:5637) at android.view.View$PerformClick.run(View.java:22429) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

Ich denke, das Problem könnte mit: loginRequest = new LoginRequest(qrCode, responseListener); Ich denke, es stürzt b wegen des responseListener. Jede Hilfe wird geschätzt

Antwort

0

Das Problem ist in Ihrem LoginRequest Code. Insbesondere diese Zeile:

params.put("qrCode",qrcode); 

Hier wird das params Feld gleich zu null. Sie erklären die korrekte Schreibweise Ihrer params Feld als Map<String String> aber man kann nie eine neue Instanz von Map<String, String>, um die Daten zu halten erstellen.

Sie Ihr Feld im Konstruktor, wie dies initialisieren:

public LoginRequest(String qrcode, Response.Listener<String> listener){ 
    super(Request.Method.POST, LOGIN_REQUEST_URL, listener, null); 
    params = new Map<String, String(); 
    params.put("qrCode",qrcode); 
} 

Oder das Feld unmittelbar nach dem erklären, wie diese initialisieren:

public static String LOGIN_REQUEST_URL = "http://suvalkijossapalas.devpanda.eu/checkQr.php"; 
public Map<String, String> params = new Map<String, String>(); 
Verwandte Themen