2016-05-13 47 views
2

大家好我對不起,如果之前有人問我這個問題,我過去3天一直在尋找這個解決方案。我是android和php的新手。 我想知道如何發送「jsonArray」(如下所示)到我的PHP服務器,然後提取在php中接收的jsonobject值。 我試過jsonarrayrequest和hashmap,但無法發送。請幫忙。如何將包含jsonobjects的JSON數組發送到php服務器

String url="http://192.168.43.210/jjj.php"; 
JSONArray list; 
RequestQueue requestQueue; 
final JSONArray jsonArray=new JSONArray(); 

for (int i=0;i<valu;i++) 
{ 
JSONObject jsonObject=new JSONObject(); 
try { 
jsonObject.put("comptext",smslist.get(i).completeText); 
jsonObject.put("amount",smslist.get(i).amount); 
jsonObject.put("txntype",smslist.get(i).txnType); 
jsonObject.put("party",smslist.get(i).party); 
jsonObject.put("from",smslist.get(i).fromNo); 
jsonObject.put("datetime",smslist.get(i).dateTime); 
jsonArray.put(jsonObject); 

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


JsonArrayRequest jsonArrayRequest=new JsonArrayRequest(Request.Method.POST, url, new Response.Listener<JSONArray>() { 
       @Override 
       public void onResponse(JSONArray response) { 

        result.append("Successfully sent"); 
       } 
      }, new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 

       } 
      }){ 
       protected Map<JSONArray,JSONArray> getparams() throws AuthFailureError{ 
        Map<JSONArray,JSONArray> parameters = new HashMap<JSONArray, JSONArray>(); 
        parameters.put(list,jsonArray); 
        return parameters; 

       } 
      }; 
      requestQueue.add(jsonArrayRequest); 

     } 


    }); 
+0

我有同樣的問題,當我做這個拳頭時間,因此沒有必要擔心看到我的答案..欣賞 – Manish

+0

我已經嘗試了字符串請求,而不是jsonarray,但同樣的哈希映射,仍然沒有工作... @ ManishKumar –

+0

檢查您的php代碼... @ Sankalp – Manish

回答

1

使用StringRequest而不是JsonArrayRequest例如:

private void register() { 

     if (!validate()) { 

      onRegistrationFailed("Registration Failed"); 
      return; 

     } 
     final String name = et_username.getText().toString(); 
     final String email = et_email.getText().toString(); 
     final String phone = et_phone.getText().toString(); 
     final String password = et_password.getText().toString(); 

     showDialog(); 

     StringRequest strRequest = new StringRequest(Request.Method.POST, Config.MAIN_URL + Config.REGISTER, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 
         Log.d(TAG, "Register Response: " + response.toString()); 
         hideDialog(); 
         try { 
          JSONObject jsonObject = new JSONObject(response); 

          int status = jsonObject.getInt("status"); 
          String msg = jsonObject.getString("message"); 

          if (status == SUCCESS) { 

           onRegistrationSuccess(name,email); 

          } else { 

           onRegistrationFailed(msg); 
          } 

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

       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Log.e(TAG, "Registration Error: " + error.getMessage()); 
       hideDialog(); 
       Toast.makeText(getApplicationContext(), 
         error.getMessage(), Toast.LENGTH_LONG).show(); 
      } 
     }) { 
      @Override 
      protected Map<String, String> getParams() { 
       // Posting params to register url 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put(Config.KEY_USERNAME, name); 
       params.put(Config.KEY_EMAIL, email); 
       params.put(Config.KEY_PHONE, phone); 
       params.put(Config.KEY_PASSWORD, password); 
       return params; 
      } 

     }; 

     // Adding request to request queue 
     AppController.getInstance().addToRequestQueue(strRequest); 

    } 
+0

字符串reqeuest和json有什麼區別? – Moudiz

+0

對不起,如果我錯了,但當我做到了第一我得到同樣的問題 – Manish

+0

並通過改變這個我解決了這個問題 – Manish

1

用於登錄樣本這是工作的代碼。所以試試這個,根據你的需要改變。

Login.java

package com.example.volleytest; 

import android.app.ProgressDialog; 
import android.content.DialogInterface; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.os.Bundle; 
import android.support.v7.app.AlertDialog; 
import android.support.v7.app.AppCompatActivity; 

import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import com.android.volley.AuthFailureError; 
import com.android.volley.Request; 
import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.StringRequest; 
import com.android.volley.toolbox.Volley; 

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

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

public class Login extends AppCompatActivity{ 

public static final String LOGIN_URL = "YOUR_URL"; 
             //"http://192.168.1.100/Login/admin.php"; 
ProgressDialog pDialog; 

public static final String KEY_USERNAME="username"; 
public static final String KEY_PASSWORD="password"; 

private EditText editTextUsername; 
private EditText editTextPassword; 
private Button buttonLogin; 

private String username; 
private String password; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.login); 

     editTextUsername = (EditText) findViewById(R.id.editTextUsername); 
     editTextPassword = (EditText) findViewById(R.id.editTextPassword); 

     buttonLogin = (Button) findViewById(R.id.buttonLogin); 

     buttonLogin.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       if(isNetworkAvailable()){ 
       userLogin(); 
       } 
       else 
       { 
        showMessageDialog("Error", "Check your Internet Connection..!"); 
       } 
      } 
     }); 
} 

private void userLogin() { 
    username = editTextUsername.getText().toString().trim(); 
    password = editTextPassword.getText().toString().trim(); 

    pDialog = new ProgressDialog(this); 
    pDialog.setMessage("Loading..."); 
    pDialog.show(); 

    StringRequest stringRequest = new StringRequest(Request.Method.POST, LOGIN_URL, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 

        try { 
         //JSONArray myJSON= new JSONArray(response); 

          JSONObject parentObject = new JSONObject(response); 
          JSONObject childObject = parentObject.getJSONObject("Tracking"); 

           String status = childObject.optString("status"); 
           String type = childObject.optString("type"); 

           //System.out.println("status : " + status); 
           //System.out.println("Type : " + type); 

           if(status.trim().equals("success")) 
           { 
            pDialog.hide(); 
            showMessageDialog("Login", type + " Login Successfully..!"); 
           } 
           else 
           { 
            pDialog.hide(); 
            showMessageDialog("Login", "No Users/Admin were Found..! "); 
           } 


        } catch (JSONException e) { 
         // TODO Auto-generated catch block 
         //e.printStackTrace(); 
         pDialog.hide(); 
         showMessageDialog("JSON Error", "Server Error..! Try after Some Time..!");//e.getMessage()); 
        } 

       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) 
       { 
        pDialog.hide(); 
        //showMessageDialog("Login", "Reponse => " + error.toString()); 
        showMessageDialog("Login", "Server Error..! Try after Some Time..!"); 
       } 
      }){ 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      Map<String,String> map = new HashMap<String,String>(); 
      map.put(KEY_USERNAME,username); 
      map.put(KEY_PASSWORD,password); 
      return map; 
     } 
    }; 

    RequestQueue requestQueue = Volley.newRequestQueue(this); 
    requestQueue.add(stringRequest); 
} 

public void showMessageDialog(String title , String Message) 
{ 
    AlertDialog dialog = new AlertDialog.Builder(Login.this) 
    .setTitle(title) 
    .setMessage(Message) 
    .setPositiveButton("Ok", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      // TODO Auto-generated method stub 
      dialog.dismiss(); 

     } 
    }) 

    .show(); 

    //TextView textView = (TextView) dialog.findViewById(android.R.id.message); 
    //textView.setTextSize(25); 

} 

    private boolean isNetworkAvailable() { 
     ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
     return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 
    } 

}

login.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
android:orientation="vertical" 
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:paddingBottom="@dimen/activity_vertical_margin" 
> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:textSize="20dp" 
    android:text="Login Using Volley Library" 
    /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="20dp" 
    android:text="Enter Username" 
    /> 

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/editTextUsername" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Enter Password" 
    /> 

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:inputType="textPassword" 
    android:id="@+id/editTextPassword" /> 

<Button 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Login" 
    android:id="@+id/buttonLogin" /> 

</LinearLayout> 
相關問題