2015-07-20 68 views
-2

嘿傢伙我試圖通過post方法從服務器解析傑森數據。我看了很多教程,但無法得到確切的解決方案。所以請幫助我。代碼snippt是...無法解析數據通過在Android的列表視圖中的post方法

public class ServiceHandler1 { 
    private String apikey; 
    static String response = null; 
    public final static int GET = 1; 
    public final static int POST = 2; 

    public ServiceHandler1() { 

    } 

    /* 
    * Making service call 
    * @url - url to make request 
    * @method - http request method 
    * */ 
    public String makeServiceCall(String url, int method) { 
     return this.makeServiceCall(url, method, null); 
    } 

    /* 
    * Making service call 
    * @url - url to make request 
    * @method - http request method 
    * @params - http request params 
    * */ 
    public String makeServiceCall(String url, int method, 
            List<NameValuePair> params) { 
     try { 
      // http client 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpEntity httpEntity = null; 
      HttpResponse httpResponse = null; 

      // Checking http request method type 
      if (method == POST) { 
       HttpPost httpPost = new HttpPost(url); 
       httpPost.setHeader("Authentication:" , apikey); 
       // adding post params 
       if (params != null) { 
        httpPost.setEntity(new UrlEncodedFormEntity(params)); 
       } 

       httpResponse = httpClient.execute(httpPost); 

      } else if (method == GET) { 
       // appending params to url 
       if (params != null) { 
        String paramString = URLEncodedUtils 
          .format(params, "utf-8"); 
        url += "?" + paramString; 
       } 
       HttpGet httpGet = new HttpGet(url); 
       httpGet.setHeader("Authentication:" , apikey); 

       httpResponse = httpClient.execute(httpGet); 

      } 
      httpEntity = httpResponse.getEntity(); 
      response = EntityUtils.toString(httpEntity); 

     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return response; 

    } 
} 

和我的代碼的其餘部分正在folllowing ... plz幫助我。

public class Home extends ListActivity { 

    private ProgressDialog pDialog; 

    // URL to get contacts JSON 
    private static String url = "http://api-11hr.anovatesoft.com/v1/list"; 

    // JSON Node names 
    private static final String TAG_CONTACTS = "contacts"; 
    private static final String TAG_USERNAME = "username"; 
    private static final String TAG_NAME = "name"; 
    private static final String TAG_EMAIL = "email"; 
    private static final String TAG_ADDRESS = "address"; 
    private static final String TAG_CONTACT_NUMBER = "contactnumber"; 
    private static final String TAG_POSTAL_CODE = "postalcode"; 
    SessionManager session; 
    private String apikey; 

    // contacts JSONArray 
    JSONArray contacts = null; 

    // Hashmap for ListView 
    ArrayList<HashMap<String, String>> contactList; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.home); 

     // Session class instance 
     session = new SessionManager(getApplicationContext()); 

     // get user data from session 
     HashMap<String, String> user = session.getUserDetails(); 


     // apikey 
     apikey = user.get(SessionManager.KEY_api); 



     contactList = new ArrayList<HashMap<String, String>>(); 

     ListView lv = getListView(); 

     // Listview on item click listener 
     lv.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
            int position, long id) { 
       // getting values from selected ListItem 
       String name = ((TextView) view.findViewById(R.id.name)) 
         .getText().toString(); 
       String cost = ((TextView) view.findViewById(R.id.email)) 
         .getText().toString(); 
       String description = ((TextView) view.findViewById(R.id.mobile)) 
         .getText().toString(); 

       // Starting single contact activity 
       Intent in = new Intent(getApplicationContext(), 
         Adds.class); 
       in.putExtra(TAG_NAME, name); 
       in.putExtra(TAG_EMAIL, cost); 
       in.putExtra(TAG_CONTACT_NUMBER, description); 
       startActivity(in); 

      } 
     }); 

     // Calling async task to get json 
     new GetContacts().execute(); 
    } 

    /** 
    * Async task class to get json by making HTTP call 
    * */ 
    private class GetContacts extends AsyncTask<Void, Void, Void> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      // Showing progress dialog 
      pDialog = new ProgressDialog(Home.this); 
      pDialog.setMessage("Please wait..."); 
      pDialog.setCancelable(false); 
      pDialog.show(); 

     } 

     @Override 
     protected Void doInBackground(Void... arg0) { 
      // Creating service handler class instance 
      ServiceHandler1 sh = new ServiceHandler1(); 

      // Making a request to url and getting response 
      String jsonStr = sh.makeServiceCall(url, ServiceHandler1.POST); 

      Log.d("Response: ", "> " + jsonStr); 

      if (jsonStr != null) { 
       try { 
        JSONObject jsonObj = new JSONObject(jsonStr); 

        // Getting JSON Array node 
        contacts = jsonObj.getJSONArray(TAG_CONTACTS); 

        // looping through All Contacts 
        for (int i = 0; i < contacts.length(); i++) { 
         JSONObject c = contacts.getJSONObject(i); 

         String username = c.getString(TAG_USERNAME); 
         String name = c.getString(TAG_NAME); 
         String email = c.getString(TAG_EMAIL); 
         String address = c.getString(TAG_ADDRESS); 
         String gender = c.getString(TAG_CONTACT_NUMBER); 
         String postalcode = c.getString(TAG_POSTAL_CODE); 

         // tmp hashmap for single contact 
         HashMap<String, String> contact = new HashMap<String, String>(); 

         // adding each child node to HashMap key => value 
         contact.put(TAG_USERNAME, username); 
         contact.put(TAG_NAME, name); 
         contact.put(TAG_EMAIL, email); 


         // adding contact to contact list 
         contactList.add(contact); 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } else { 
       Log.e("ServiceHandler", "Couldn't get any data from the url"); 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 
      // Dismiss the progress dialog 
      if (pDialog.isShowing()) 
       pDialog.dismiss(); 
      /** 
      * Updating parsed JSON data into ListView 
      * */ 
      ListAdapter adapter = new SimpleAdapter(
        Home.this, contactList, 
        R.layout.list_item1, new String[] { TAG_NAME, TAG_EMAIL, 
        TAG_CONTACTS }, new int[] { R.id.name, 
        R.id.email, R.id.mobile }); 

      setListAdapter(adapter); 
     } 

    } 

} 

這是會話管理器類,其中i存儲特定會話的apikey ...

public class SessionManager { 
    // Shared Preferences 
    SharedPreferences pref; 

    // Editor for Shared preferences 
    SharedPreferences.Editor editor; 

    // Context 
    Context _context; 

    // Shared pref mode 
    int PRIVATE_MODE = 0; 

    // Sharedpref file name 
    private static final String PREF_NAME = "AndroidHivePref"; 

    // All Shared Preferences Keys 
    private static final String IS_LOGIN = "IsLoggedIn"; 



    // Email address (make variable public to access from outside) 
    public static final String KEY_api = "apikey"; 



    // Constructor 
    public SessionManager(Context context) { 
     this._context = context; 
     pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE); 
     editor = pref.edit(); 
    } 
    /** 
    * Create login session 
    * */ 
    public void createLoginSession(String name, String apikey){ 
     // Storing login value as TRUE 
     editor.putBoolean(IS_LOGIN, true); 

     // Storing name in pref 


     // Storing email in pref 
     editor.putString(KEY_api, apikey); 

     Log.d("Ausds...",apikey); 






     // commit changes 
     editor.commit(); 
    } 


    /** 
    * Check login method wil check user login status 
    * If false it will redirect user to login page 
    * Else won't do anything 
    * */ 
    public void checkLogin(){ 
     // Check login status 
     if(!this.isLoggedIn()){ 
      // user is not logged in redirect him to Login Activity 
      Intent i = new Intent(_context, MainActivity.class); 
      // Closing all the Activities 
      i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

      // Add new Flag to start new Activity 
      i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

      // Staring Login Activity 
      _context.startActivity(i); 
     } 

    } 



    /** 
    * Get stored session data 
    * */ 
    public HashMap<String, String> getUserDetails(){ 
     HashMap<String, String> user = new HashMap<String, String>(); 



     // user api key 
     user.put(KEY_api, pref.getString(KEY_api, null)); 

     // return user 
     return user; 
    } 


    /** 
    * Clear session details 
    * */ 
    public void logoutUser(){ 
     // Clearing all data from Shared Preferences 
     editor.clear(); 
     editor.commit(); 


     // After logout redirect user to Loing Activity 
     Intent i = new Intent(_context, MainActivity.class); 
     // Closing all the Activities 
     i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

     // Add new Flag to start new Activity 
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

     // Staring Login Activity 
     _context.startActivity(i); 
    } 

    /** 
    * Quick check for login 
    * **/ 
    // Get Login State 
    public boolean isLoggedIn(){ 
     return pref.getBoolean(IS_LOGIN, false); 
    } 
} 
+1

你得到任何錯誤?如果是的話請在這裏發佈日誌 –

+0

@NeerajKumar我只有一個活動,並且在Log上有一條消息顯示..... {「error」:true,「message」:「Api key is misssing」} – Sanjeev

+1

你沒有傳遞apikey到你的makeServiceCall()方法 –

回答

0

使用此代碼來處理服務器響應,

public String getWebServiceTask(String requestURL,JSONObject postDataParams) 
{ 
    URL url; 
    String response = ""; 
    int responseCode = 0; 
    JSONObject responseObject = null; 
    try { 
     url = new URL(requestURL); 

     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setReadTimeout(15000); 
     conn.setConnectTimeout(15000); 
     conn.setRequestProperty ("Authorization", "Basic admin:123456"); 
     conn.setRequestProperty("Content-Type", "application/json"); 
     conn.setRequestProperty("Accept", "application/json"); 
     conn.setRequestProperty("Content-Language", "en-US,en;q=0.8"); 
     conn.setRequestMethod("POST"); 
     conn.setDoInput(true); 
     conn.setDoOutput(true); 
     conn.connect(); 

     if(postDataParams != null){ 
      OutputStream os = conn.getOutputStream(); 
      BufferedWriter writer = new BufferedWriter(
        new OutputStreamWriter(os, "UTF-8")); 
      writer.write(postDataParams.toString()); 
      writer.flush(); 
      writer.close(); 
      os.close(); 
     } 

     responseCode=conn.getResponseCode(); 

     if (responseCode == HttpsURLConnection.HTTP_OK) { 
      String line; 
      BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream())); 
      while ((line=br.readLine()) != null) { 
       response+=line; 
      } 
     } 
     else { 
      response=""; 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    try { 
     responseObject=new JSONObject(); 
     responseObject.put(MICConstant.API_RESPONSE_CODE, responseCode); 
     responseObject.put(MICConstant.API_RESPONSE, response); 
    } catch (Exception e) { 
     // TODO: handle exception 
    } 

    return responseObject.toString(); 
} 
+0

我也使用這個代碼..但這也是行不通的。 – Sanjeev

+0

你面臨什麼問題? –

+0

相同...錯誤.. – Sanjeev